Bugzilla – Bug 2372
EnergySourceContainer assignment operator produces memory leaks
Last modified: 2016-04-10 17:49:19 EDT
Created attachment 2383 [details]
The problem was first spotted in the ns-3-users group here:
Alexander Krotov found the problem and described in the ns-dev mailing list.
Attached there's the minimal script to reproduce the bug.
> I have minimized the example down to attached one.
> Under valgrind, it shows memory errors.
> If I replace the lines
> EnergySourceContainer energySources;
> energySources = basicSourceHelper.Install (clientNodes);
> EnergySourceContainer energySources = basicSourceHelper.Install (clientNodes);
> then there are no errors.
> Now, I think the problem is that EnergySourceContainer (unlike
> NodeContainer, for example) is derived from Object, so it must be created
> with CreateObject. You can see how to do it correctly in
> src/energy/examples/li-ion-energy-source.cc .
> The main problem is that EnergySourceHelper::Install method, which is
> inherited by BasicEnergySourceHelper, returns EnergySourceContainer,
> instead of Ptr<EnergySourceContainer>. It is not the correct way to pass
> Objects around.
> I think the solution is to make EnergySourceContainer, like
> NetDeviceContainer, not derived from Object.
I totally agree with Alexander. Containers should have a constant use patterns, and having one behaving differently leads to hard-to-find mistakes.