Charlton held off a Bristol Rovers fightback from two goals down to secure a hard-fought win and keep the pressure up on league leaders Leeds.
David Mooney put Charlton ahead from close in early on and Deon Burton then picked himself up after Bryon Anthony's foul to make it 2-0 with a penalty.
Jeff Hughes replied from the spot after Christian Dailly fouled Jo Kuffour and Chris Lines' header levelled it up.
But Nicky Bailey bundled in for 3-2 and Akpo Sodje's late tap-in sealed it.
Bristol Rovers manager Paul Trollope told BBC Radio Bristol:
"Certainly we weren't disciplined in our defending in that opening period and to find ourselves 2-0 down was a difficult situation but the response after that was good.
"The effort and commitment was fine from the players, there's no question of that, and some of our forward play you can't argue with.
"But we've got serious issues at the other end and we need to work, need to improve and probably change personnel here and there to get the results we want."