Goals from Rhys McCabe and Jeremy Helan gave Sheffield Wednesday an impressive victory that lifts them out of the Championship relegation places.
McCabe's superb volley from the edge of the area midway through the first half gave the Owls the lead.
Helan scored deep into stoppage time of his last game before returning to parent club Manchester City at the end of his loan spell.
Charlton were largely disappointing and could only muster two shots on goal.
Wednesday had already gone close to opening the scoring through David Prutton and Anthony Gardner before McCabe struck with his first senior goal.
Prutton forced Charlton goalkeeper Ben Hamer into making a fine save, while Gardner unleashed two fierce shots.
The Owls took the lead when a corner was cleared to McCabe, who left Hamer with no chance from 20 yards out.
Michail Antonio had further chances for the hosts before the break, while the visitors failed to threaten the Wednesday goal.
Charlton were convinced they should have had a penalty when Yann Kermorgant tangled with Gardner after 37 minutes, and manager Chris Powell's protests to referee Gary Sutton saw him sent off at half-time.
Substitute Ricardo Fuller's shot in the 69th minute, blocked by Miguel Llera, was Charlton's first on target.
Fuller had a shot on target late in the game, but Wednesday defender Lewis Buxton threw himself in the way to preserve the lead.
Helan pounced from close range in the fourth minute of injury time to secure the three points and Wednesday's second win in a row.
Sheffield Wednesday manager Dave Jones:
"We had a shaky start and they could have scored a goal in the first two or three minutes but after that we sorted ourselves out and I thought we were worthy winners in the end.
"There's a long way to go and we're fighting for our lives. What we maybe lack sometimes in terms of a little bit of quality, we make up for in endeavour and commitment and that's all you can ask for."
Charlton manager Chris Powell said:
"There were a number of incidents that angered me during the first half and I went to the referee at half-time and asked him about a penalty we didn't get. There was a goal ruled out for offside which was actually onside and there were also a number of fouls on my players.
"I was asking for consistency and fairness but I didn't swear at the referee or point at him. He sent me to the stand because he said it was for the image of the game. He said I'd left my technical area but it was half-time so what was I meant to do?"
Full Time The referee blows his whistle to end the game.
90:00 +3:29 Goal scored
Goal! - Jeremy Helan - Sheff Wed 2 - 0 Charlton Jeremy Helan finds the back of the net with a goal from close in low into the middle of the goal. Sheff Wed 2-0 Charlton.
Ricardo Fuller fouled by Reda Johnson, the ref awards a free kick. Direct free kick taken by Danny Green.
Foul by Anthony Gardner on Ricardo Fuller, free kick awarded. Direct free kick taken by Ben Hamer.
Effort on goal by Rhys McCabe from just inside the area clears the crossbar.
Short corner taken by Rhys McCabe from the right by-line.
Substitution (Sheff Wed) makes a substitution, with Mamady Sidibe coming on for Gary Madine.
Jeremy Helan gives away a free kick for an unfair challenge on Danny Green. Lawrie Wilson produces a strike on goal direct from the free kick.
Centre by Reda Johnson, save by Ben Hamer.
The ball is delivered by Lewis Buxton, Leon Cort manages to make a clearance.
Ricardo Fuller takes a shot. Blocked by Lewis Buxton.
Centre by Chris Solly, clearance by Lewis Buxton.
Jeremy Helan takes a shot. Save by Ben Hamer.
Outswinging corner taken right-footed by Danny Green played to the near post.
Substitution Danny Green joins the action as a substitute, replacing Emmanuel Frimpong.
Substitution Danny Haynes goes off and Robert Hulse comes on.
Danny Haynes crosses the ball, Jeremy Helan manages to make a clearance.
Substitution (Sheff Wed) makes a substitution, with Kieran Lee coming on for Chris O'Grady.
Corner taken left-footed by Johnnie Jackson from the left by-line, clearance made by Miguel Llera.
Lewis Buxton sends in a cross.
The ball is swung over by Michail Antonio, clearance by Leon Cort.
Ricardo Fuller takes a shot. Blocked by Miguel Llera. Outswinging corner taken by Johnnie Jackson.
Free kick awarded for a foul by Michail Antonio on Michael Morrison. Direct free kick taken by Ben Hamer.
Substitution Chris Lines joins the action as a substitute, replacing David Prutton.
Substitution (Charlton) makes a substitution, with Ricardo Fuller coming on for Salim Kerkar.
Lawrie Wilson crosses the ball.
Michail Antonio is caught offside. Salim Kerkar takes the indirect free kick.
Chris O'Grady takes a shot. Save by Ben Hamer.
Headed effort from deep inside the area by Anthony Gardner misses to the right of the goal.
Daniel Seaborne gives away a free kick for an unfair challenge on Michail Antonio. Direct free kick taken by Miguel Llera.
Booking Lawrie Wilson is shown a yellow card.
Yann Kermorgant delivers the ball.
Lewis Buxton challenges Danny Haynes unfairly and gives away a free kick. Direct free kick taken by Johnnie Jackson.
The referee blows for offside against Michail Antonio. Indirect free kick taken by Ben Hamer.
David Prutton is adjudged to have handled the ball. Free kick taken by Johnnie Jackson.
The game restarts for the second half.
45:00 +1:24 Half time
Half Time The first half comes to an end.
The referee blows for offside against Danny Haynes. Free kick taken by Chris Kirkland.
The assistant referee flags for offside against Jeremy Helan. Michael Morrison restarts play with the free kick.
Unfair challenge on Reda Johnson by Lawrie Wilson results in a free kick. Chris Kirkland restarts play with the free kick.
Chris O'Grady takes a shot. Save made by Ben Hamer.
Effort from the edge of the penalty area by Michail Antonio goes wide of the left-hand post.
Lawrie Wilson gives away a free kick for an unfair challenge on Reda Johnson. Free kick taken by Chris Kirkland.
The referee blows for offside against Chris O'Grady. Free kick taken by Ben Hamer.
Foul by Chris O'Grady on Emmanuel Frimpong, free kick awarded. Johnnie Jackson takes the direct free kick.
The assistant referee signals for offside against Danny Haynes. Chris Kirkland restarts play with the free kick.
Unfair challenge on Salim Kerkar by Rhys McCabe results in a free kick. Johnnie Jackson takes the free kick.
Yann Kermorgant challenges Reda Johnson unfairly and gives away a free kick. Chris Kirkland takes the direct free kick.
Michail Antonio has an effort at goal from outside the penalty area which goes wide right of the goal.
Michail Antonio takes a shot. Ben Hamer makes a save.
19:59 Goal scored
Goal! - Rhys McCabe - Sheff Wed 1 - 0 Charlton Goal scored by Rhys McCabe from just outside the penalty area to the top left corner of the goal. Sheff Wed 1-0 Charlton.
Corner taken by Miguel Llera from the right by-line played to the near post, Lawrie Wilson makes a clearance.
The ball is delivered by Michail Antonio, Michael Morrison manages to make a clearance.
Danny Haynes is caught offside. Chris Kirkland restarts play with the free kick.
The ball is crossed by Michail Antonio, save by Ben Hamer.
Salim Kerkar takes the direct free kick.
Booking Caution for Reda Johnson.
Foul by Reda Johnson on Lawrie Wilson, free kick awarded.
Reda Johnson gives away a free kick for an unfair challenge on Lawrie Wilson. Ben Hamer takes the free kick.
Michail Antonio sends in a cross.
Shot from 20 yards by David Prutton. Ben Hamer makes a brilliant save. Shot by Anthony Gardner from 18 yards. Danny Haynes makes a clearance. Corner taken by Gary Madine from the left by-line, Effort on goal by Anthony Gardner from just inside the box goes harmlessly over the target.
Unfair challenge on Lawrie Wilson by Reda Johnson results in a free kick. The free kick is swung in left-footed by Johnnie Jackson, Gary Madine manages to make a clearance.
Danny Haynes crosses the ball.
The ball is crossed by Lawrie Wilson, Miguel Llera manages to make a clearance.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.