Marco Borriello had more than just a half-chance when he was played in by a smart header over the Rossoneri back-line, but his effort flashed wide of Gianluigi Donnarumma’s near post.
The home side continued their early dominance after Donnarumma was forced into a flying save just before the quarter-hour mark, when Lorenzo Lollo struck a super long-range effort that seemed destined for the top corner.
The tempo and intensity of the game grew as the game approached the half-hour point, but Milan were still unable to create a clear-cut opportunity with both Alessio Cerci and Carlos Bacca a whisker away from creating enough space to fathom a worthwhile effort.
M’Baye Niang would have Milan’s best chance shortly after, releasing a fierce shot that was brilliantly tipped over by Vid Belec.
Sinisa Mihajlovic’s side began the second-half as they ended the first but chances were few and far between for either team, with Carpi resorting to pinning all their attacking endeavours on Kevin Lasagna.
The Rossoneri attempted to change the fate of the match with Cerci being replaced by former Shakhtar Donetsk man Luiz Adriano, but even the Brazilian couldn’t muster up any form of chance, mainly down to Bacca’s poor crossing in the final third, as the match entered the final 15 minutes.
The game was summed up by a truly awful free-kick from Niang whose effort sailed far over the crossbar into the stands.
With five minutes remaining the best moments of the affair occurred when efforts from both Alex and Giacomo Bonaventura were thwarted by Belec.
The result meant Milan failed to leapfrog Atalanta and now remain in eighth place.