I been working in a project, but recently I check if my program has some leaking and the results is that it's leaking and a lot.
I use _CrtDumpMemoryLeaks();
to receive all the messages of leaking and I check that most of them are related with boost, I know that it must be my problem, but I can't understand why it's leaking.
In the debug output shows me these lines:
Dumping objects ->
{673} normal block at 0x00E075E0, 8 bytes long.
Data: <H @e > 48 92 E0 00 40 65 E0 00
{671} normal block at 0x00E065C0, 8 bytes long.
Data: <@e > 40 65 E0 00 00 00 00 00
{669} normal block at 0x00E06540, 68 bytes long.
Data: < e mountains.pn> C0 65 E0 00 6D 6F 75 6E 74 61 69 6E 73 2E 70 6E
{665} normal block at 0x00E063B0, 8 bytes long.
Data: <H > 48 92 E0 00 00 00 00 00
{663} normal block at 0x00E09248, 68 bytes long.
Data: < c nubes.png > B0 63 E0 00 6E 75 62 65 73 2E 70 6E 67 00 CD CD
Which leads me to believe that the problem is where I use those strings, and the first call with those are in these lines:
tutorialLevel->addLayerToList("nubes.png", 1600.f, 720.f, 1.0f, 0.0f, 0.1f, true);
tutorialLevel->addLayerToList("mountains.png", 1600.f, 720.f, speedXVectorPanda.at(0), 0.0f, 0.5f, false);
And the actual function addLayerToList
is the next:
void Level::addLayerToList(std::string name, GLfloat widthLayer, GLfloat heightLayer, GLfloat velX, GLfloat velY,
GLfloat constantX, bool hasRepetition)
{
layersList.push_back( new Layer(name, widthLayer, heightLayer, velX, velY, constantX, hasRepetition) );
}
And layersList is define like this:
boost::ptr_vector< Layer > layersList;
Maybe, I misunderstood how the ownership of pointers work in Boost, but in the examples I recently check, this is a correct way to pass ownership of the object to the ptr_vector
, am I wrong?
And my other question is, if it's necessary release the pointers for the vector, or it's better leave the auto_ptr
do his work?
Thanks for the help.