Після смерті Гасдрубала армія обрала Ганнібала — сина Гамилькара — головнокомандувачем. Всіх своїх дітей — Магона, Гасдрубала і Ганнібала — Гамилькар виховував у дусі ненависті до Риму, тому, отримавши контроль над армією, Ганнібал почав шукати привід для війни. У 218 році до н. е. він захопив Сагунт — іспанське місто і союзника Риму — війна почалася. Несподівано для ворога Ганнібал провів свою армію в обхід через Альпи на територію Італії. Там він здобув ряд перемог — при Тицині, Требії і Тразимено. У Римі призначили диктатора, але у 216 році до н. е. біля міста Канни Ганнібал завдав римлянам нищівної поразки, наслідком якої був перехід на бік Карфагену значної частини Італії, і другого за значенням міста — Капуї. Бойові дії велися і в Іспанії, і на Сицилії. Спочатку успіх був на боці Карфагену, але потім римляни зуміли здобути ряд важливих перемог. Із загибеллю брата Ганнібала — Гасдрубала, який вів йому значні підкріплення, — становище Карфагену дуже сильно ускладнилося. Висадка Магона в Італії була безрезультатна — він зазнав поразки і був убитий у бою. Незабаром Рим переніс бойові дії в Африку. Уклавши союз з царем нумідійців Масиніссою, Сципіон завдав пунійцям ряд поразок. Ганнібала викликали на батьківщину. У 202 році до н. е. в битві біля Зами, командуючи погано навченим військом, він зазнав поразки, і карфагеняни вирішили укласти мир. За його умовами вони були змушені віддати Риму Іспанію і всі острови, утримувати тільки 10 бойових кораблів і виплатити талантів контрибуції. Крім того, вони не мали права воювати з будь-ким без дозволу Риму.