Фабий сформировал два новых легиона и, добавив их к существующим римским и союзным войскам, принял командование над армией в сорок тысяч человек. Он проводил разумную, но крайне непопулярную тактику — преследовал Ганнибала, избегая вступать с ним в битву. Фабий стремился измотать врага в надежде, что в какой-то момент он обязательно совершит роковую ошибку и потерпит поражение. Такая тактика сразу же оправдала себя, поскольку Фабий окружил карфагенян в гористой местности. Однако Ганнибал не отчаялся и после наступления ночи велел привязать горящие факелы на рога двум тысячам коров и гонять испуганных животных туда сюда по вершинам гор. Эта хитроумная уловка сработала. Римляне думали, что противник собирается напасть на них, в то время как карфагеняне сумели выйти из окружения под покровом ночи.
Тактика сдерживания позволила немолодому диктатору обучить свои новые войска и выиграть время, чтобы республика вышла из тяжелого морального состояния. Однако общественное мнение очень скоро настроилось против Фабия, который после окончания своего шестимесячного срока ушел в отставку. В результате у Рима оказалась огромная армия численностью 87 000 человек, то есть восемь легионов, и почти такое же количество союзных войск. Теперь римляне превосходили Ганнибала, армия которого насчитывала только 50 000 тысяч человек.
Два консула, сменившие Фабия, имели совершенно разный взгляды на план военной кампании. Представитель одного из древнейших патрицианских родов Луций Эмилий Павел, так же, как и Фабий, полагал, что Ганнибал неизбежно столкнется с голодом во время зимовки в Южной Италии. Однако выходец из плебеев, Гай Теренций Варрон, не одобрял тактику изнурения противника. Он утверждал, что Рим должен максимально использовать численное преимущество своей армии и как можно скорее вызвать противника на полномасштабное сражение.
Консулы обнаружили Ганнибала в районе небольшого городка Канны в Апулии среди пыли и цикад. По установленным правилам консулы поочередно командовали в течение одного дня. Когда Ганнибал вывел свою армию и предложил начать сражение, командовал Павел, и он отклонил предложение. На следующий день это же предложение принял Варрон. Сразу же после восхода солнца он вывесил над своим шатром красное знамя — вексиллум (
Ганнибал внимательно посмотрел на противника и заметил, что пехота выстроилась на очень небольшой площади, поэтому она имела большую глубину построения и очень тесно стояла по фронту. Ей было очень трудно маневрировать. Карфагенский полководец выстроил свои войска так, чтобы использовать эту возможную слабость. Он выставил свою кельтскую и испанскую пехоту напротив римского центра таким образом, что она оказалась выгнута дугой в сторону противника. Позади нее на обоих флангах, невидимых с фронта, он разместил два подразделения своих лучших войск — надежную и хорошо обученную ливийскую пехоту. На флангах его конница должна была сражаться с римской.
Когда началось сражение, римский центр стал оттеснять кельтов и испанцев, так что их линия построения изменилась с выпуклой дуги на вогнутую. Римская пехота, желая расширить себе пространство для битвы, необдуманно продвигалась все дальше вперед, пока с обеих сторон у нее не оказались ливийцы. После этого ливийская пехота обошла римлян и ударила по ним с тыла.
Тем временем конница Ганнибала на его левом фланге разгромила римскую конницу, которой командовал консул Павел. В строгом порядке победоносные кельтские и испанские всадники разделились и прошли позади римской армии, чтобы напасть на вражескую конницу на правом фланге. Последняя в панике бежала. Затем они разделились второй раз и атаковали с тыла римскую пехоту, которая теперь оказалась окруженной со всех сторон.
Остальная часть сражения представляла собой многочасовую кровавую бойню. Плотная толпа римских легионеров и их союзников постепенно редела. Павел храбро бился до последнего дыхания и погиб, сраженный камнем из пращи, тогда как Варрон с семьюдесятью всадниками сумел бежать. Он собрал всех отставших и взял на себя общее руководство тем, что осталось от армии. Когда он возвратился в Рим, оказалось, что народ приветствовал «его за то, что он не отчаялся в республике». Варрон продолжал получать общественные назначения, однако он больше никогда не возглавлял консульскую армию. Таков был Рим со своим великодушием.
Спастись от массовой резни удалось еще одной многочисленной группе, среди которой оказался девятнадцатилетний Публий Сципион. Он угрожал убить нескольких молодых аристократов, которые вели разговоры о бегстве в другие страны, и вынудил их поклясться, что они никогда не покинут свою родину.