In der Folgezeit versuchte Karthago seinen Machtbereich in Spanien auszuweiten. Infolge dieser Expansion wurde ein Vertrag zwischen dem karthagischen Feldherren Hasdrubal und Rom geschlossen, in dem sich dieser verpflichtete, nicht in kriegerischer Absicht den Iber zu übertreten. Aus welchen Motiven Rom diesen sog. Hasdrubal- bzw. Feldherrenvertrag schließen wollte, ist aufgrund der Quellenlage umstritten. Aufgrund des Bruches dieses Vertrages durch Hannibal erklärte Rom Karthago den Krieg. Der Feldherr Hannibal überquerte mit 38.000 Soldaten und 37 Kriegselefanten die Alpen (→ Hannibals Alpenüberquerung) und fiel in Italien ein, wo er den Römern in der Schlacht am Trasimener See und in der Schlacht von Cannae schwere Niederlagen zufügte. Obwohl zahlreiche italische Bundesgenossen Roms die Seiten gewechselt hatten, konnte Hannibal, vom Nachschub abgeschnitten, Rom nicht ernsthaft gefährden. Unter Scipio Africanus dem Älteren erzielten die Römer Erfolge in Spanien. 204 v. Chr. landete Scipio schließlich in Nordafrika und zwang damit Hannibal zur Rückkehr. In der Schlacht von Zama wurde Karthago entscheidend besiegt. 201 v. Chr. musste sich Karthago einem harten Friedensvertrag fügen. Es musste Spanien an die Römer abtreten, seine Kriegsflotte aufgeben, Tribute zahlen und durfte nur noch mit der Genehmigung Roms Kriege führen. Damit hatte Karthago seinen Status als Großmacht verloren.