The Robins are rooted to the bottom of the league and rarely looked like climbing off it as Charlton coasted to the three points at Ashton Gate.
Danny Haynes put Chris Powell's side in front in the 20th minute after he was on hand to clear up after Dale Stephens' shot had hit both posts and bounced out.
The damage was doubled 11 minutes after the restart when Michael Morrison struck his first goal of the season from inside the penalty area.
McInnes' men, who have not won since beating Peterborough in September, enjoyed a brief spell of domination in the first half, but their inability to at least make a game of it hints that a winter of discontent is on the horizon.
For the Addicks, it was a second win on the bounce and they sit comfortably in mid-table.
City created an early chance when Albert Adomah sent in a low cross that Martyn Woolford got on the end of, but Chris Solly was in the right place to block.
Charlton responded, and after Salim Kerkar had forced Tom Heaton into a smart parried save they took the lead in the 19th minute. Rob Hulse fed Stephens and his shot came off both posts before leaving Haynes with the easiest of tap-ins from close range.
It was almost double trouble for City just two minutes later when the woodwork was rattled again from Haynes' shot.
The Robins then rallied and missed two good opportunities to respond. First Addicks keeper Ben Hamer did well to save at the feet of Adomah and then Sam Baldock wasted a glaring chance when he failed to connect properly and his shot went safely to Hamer.
Charlton could have been further ahead soon after the restart when Haynes was put through on goal, but he went wide and sent his effort over.
The visitors did score a second, though, when a loose ball fell to Morrison in the area and he slotted home in the 56th minute to give his side a cushion.