Chris Iwelumo scored in the third minute of time added on as Charlton held on for an hour with ten men to beat Southampton.
Charlton went into the match on the back of four matches without a win and they were quickly hampered by the loss of Jose Semedo, who was sent off in the 36th minute.
Until then Charlton had looked the better of the teams, but Portuguese midfielder Semedo had already been booked for a foul in the 15th minute when he lunged at Jhon Viafara 21 minutes later in midfield.
But Charlton made light of their handicap and fought tenaciously for an important victory.
Southampton failed to take advantage of Semedo's red card but they had their chances well before Iwelumo's late winner.
Viafara shot over the bar in the 43rd minute at full stretch and just before the break Stern John somehow shot wide with only the goalkeeper to beat.
Referee Keith Hill was a busy man from booking eight players other than Semedo as Charlton held on under increasing pressure.
Chinese midfield player Zhi Zheng shot wastefully over the bar for Charlton after 21 minutes from ten yards, but it looked as if Southampton would have to be content with a point.
That was until deep into injury time when substitute Luke Varney got away down the right and his perfect centre to the far post was met with an equally powerful header by Iwelumo from close range.
It signalled Southampton's seventh defeat of the season and, in truth, they created few chances.
Charlton defender Sam Sodje hit the underside of the bar in the first half as Charlton began impressively before the loss of Semedo obliged them to reorganise and defend in depth.