Goals from Rudy Gestede, Michael Keane and Tom Cairney secured a 3-1 victory at the Valley which means Rovers will need to win at Wigan in their last game, as well as make up a six-goal turnaround on the sixth-placed Latics.
Even then they would also need Brighton to slip up to confirm an unlikely play-off place.
Charlton remained just two points above the relegation places but can improve their survival chances with a favourable result at home to Watford on Tuesday when they use up a game in hand on most of the clubs near them at the wrong end of the table.
Two early chances fell to Charlton winger Callum Harriott in the space of a few seconds but Keane blocked his first effort and Matthew Kilgannon was in the way of the follow-up
Jordan Cousins was barged over outside the Rovers box but the away wall blocked Astrit Ajdarevic's free-kick and Charlton required some smart defending from Dorian Dervite at the other end to prevent Craig Conway from setting up Jordan Rhodes in front of goal.
Rhodes was hurt in a collision with home goalkeeper Ben Hamer as the striker nodded the ball over him and just wide. Hamer had certainly not made contact with the ball but a goal-kick was given instead of a penalty.
Rovers took the lead in the 26th minute thanks to Gestede's header from Joshua King's cross from the right that Hamer seemed to have covered but somehow allowed to creep in at the far post.
Ajdarevic sent an overhead kick wide in reply but King should have made it 2-0 instead of firing wide after Harriott had been caught in possession.
Marvin Sordell should have made Rovers pay with a penalty equaliser after he had won the spot-kick himself in the 40th minute but Paul Robinson pulled off a great save, diving to his right to beat the ball away.
Rovers doubled their lead six minutes into the second half when Keane rose to meet Conway's free-kick into the six-yard box.
Charlton needed a response and Sordell provided one in the 54th minute with a curling shot from the edge of the box that was perfectly placed beyond the reach of Robinson.
That galvanised the home side, who swapped Harriott for Iran international Reza Ghoochannejhad before the hour mark.
But Cairney restored Rovers' two-goal advantage in the 63rd minute, slotting calmly into an empty net after Rhodes had seen his shot blocked on the line by Dervite.
Gestede saw a header hit the bar from a corner before Robinson parried a long-ranger from Morgan Fox at the other end.
Hamer denied Gestede a late fourth with a smart save to keep out his header.