W tym czasie armia Hannibala składała się głównie z mieszkańców Italii. Ich morale było dużo słabsze niż wojsk, z którymi Hannibal przybył do Italii dziewięć lat wcześniej. Oligarchowie z Kartaginy nie nadsyłali mu obiecanych posiłków, bo obawiali się wzrostu jego potęgi i z zazdrości o pozycję jaką zajmował ród Barkidów. Hazdrubal dotarł do Italii, ale jego armia została zniszczona a on sam zginął w bitwie nad Metaurusem w 207 p.n.e., zanim połączył się z bratem. Pozbawiony szans na otrzymanie posiłków Hannibal wycofał się na południe Italii i tam zawzięcie odpierał ataki wielokrotnie liczniejszych wojsk Rzymian.

W 204 p.n.e. rzymska armia pod wodzą Scypiona wylądowała w Afryce. W następnym roku Kartagina odwołała Hannibala z Italii do Afryki, by powstrzymał i pokonał Scypiona. Szczęście jednak odwróciło się od niego i w 202 p.n.e. pod Zamą poniósł klęskę w bitwie z wojskami rzymsko-numidyjskimi.

Kartagina nie była już w stanie dłużej prowadzić wojny. W 201 p.n.e. podpisano pokój, na mocy którego Kartagińczycy mogli zatrzymać tylko swoje posiadłości w Afryce.