Ганнибал все еще не спешил нападать на Рим, поскольку осознавал, что незавоеванная Италия представляла огромную опасность. Тем временем Квинт Фабий, ставший диктатором, избрал тактику уклонения от больших сражений, изматывая карфагенян неожиданными нападениями. Но римские плебеи, неохотно пошедшие на эту тяжелую войну, смотрели на затяжку ее, как на явление разорительное для бедного люда, создалась целая демагогическая агитация против осторожной стратегии Фабия, прозванного Кунктатором (Медлителем). В итоге презиравший такое поведение нетерпеливый магистр конницы Мунций Руф получил от сената статус командира, равного диктатору, и решил дать противнику сражение при Геронии. И только чудо – своевременная помощь Фабия – спасла честолюбивого Руфа от разгрома.

Рим, благодаря выигранному Фабием времени, все же собрал большую 86-тысячную армию, назначив ее командирами Эмилия Павла и Теренция Варрона. Но Ганнибал так и не сделал даже попытки перейти от угрозы Риму к его атаке.

В конце июля 216 года до н. э. Ганнибал быстрым маршем провел 50 000 своих солдат в Канны и захватил там римские склады с провиантом, бросив вызов армии римлян, стоявшей у реки Ауфид (Офанто). 2 августа Ганнибал вывел на поле сражения свою армию в шести колоннах. Две средних, общим числом 20 000, образовывались более слабой иберийской и галльской пехотой, которым суждено было выдерживать основной натиск римлян. Чтобы морально поддержать этих воинов, Ганнибал со своим братом и штабом расположился за ними. Их окружали две колонны по 6000 африканских испытанных ветеранов. Наконец, фланговые колонны были чисто кавалерийские: на левом фланге – тяжело вооруженная конница – «кирасиры» Гасдрубала, на правом – легкая, преимущественно нумидийская конница. Всего 10 000 всадников. Равное с римлянами число легковооруженных всадников маскировало фронт Ганнибала. Боевое расположение получалось в виде подковы.

Римляне – 55 000 гоплитов, 8000 легковооруженных, 6000 всадников, а также 10-тысячный гарнизон, оставленный в лагере, – были построены в особенно глубокую фалангу (манипулы – 10 человек по фронту, 12 в глубину), в общем не менее 34 шеренг. Такая глубина вызывалась стремлением развить максимальный натиск и не слишком затруднять наступление непомерной длиной фронта пехоты, которая растянулась на довольно большое расстояние. Конницу распределили по флангам.

На фронте римляне решительно атаковали галлов и испанцев, нанесли им большие потери и заставили карфагенский центр попятиться. Но присутствие здесь Ганнибала удержало галлов от разрыва фронта и бегства. В решительную минуту, под влиянием удара с тыла, римская фаланга остановилась. Остановка для фаланги означала ее гибель. С флангов ударили африканцы, на римлян посыпались дротики и стрелы. Только крайние шеренги окруженной толпы римских легионеров могли действовать оружием – задние были способны при атаке увеличить натиск, но при остановке фаланги представляли только мишени для летящих камней, дротиков и стрел. Почуяв победу, карфагенские наемники стали теснить повсюду римлян, которым все труднее было действовать оружием. Положение последних становилось безысходным.

После долгого побоища было убито 48 000 римлян, среди которых были 25 высших командиров и консул Эмилий Павел. 6000 римлян оказались в плену. Пробились немногие: из остатков 16 легионов римлянам позже удалось сформировать только 2 легиона. Сам Варрон затерялся где-то среди беглецов. Однако цифры, относящиеся к потерям, и описание хода сражения римскими историками не заслуживают доверия. Даже если взять наименьшую из приводимых в источниках цифру карфагенских потерь при Каннах – около 6000 убитых, то этому числу должно соответствовать никак не меньше 10 000 раненых. В таком случае к концу сражения Ганнибал должен был иметь в строю не более 34 000 воинов. Каждый из них за время сражения должен был уничтожить как минимум одного неприятельского воина. И это при том, что реально в рукопашной схватке участвовало лишь меньшинство армии – только бойцы передовых шеренг…