Memory leak when deleting entity

Problems building or running the engine, queries about how to use features etc.
Post Reply
Ogre22
Gnoblar
Posts: 2
Joined: Sun Jan 10, 2016 1:48 pm

Memory leak when deleting entity

Post by Ogre22 »

I enabled the Ogre memory tracker and according to it the following code leaks memory:

Code: Select all

	mName = "Ninja";
	mSceneMgr = pSceneMgr;
	mSceneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
	mEntity = mSceneMgr->createEntity(mName, "ninja.mesh");
	mSceneNode->attachObject(mEntity);
	
	mSceneNode->detachObject(mEntity);
	mSceneMgr->destroyEntity(mEntity);
	mSceneMgr->destroySceneNode(mSceneNode);
The output:
Ogre Memory: Detected memory leaks !!!
Ogre Memory: (5) Allocation(s) with total 232 bytes.
Ogre Memory: Dumping allocations ->
..\Ogre3D\Ogre3D_source\OgreMain\src\OgreMesh.cpp(1724) : {168 bytes} function: Ogre::Mesh::buildEdgeList
(unknown source):(0) : {16 bytes} function:
(unknown source):(0) : {16 bytes} function:
(unknown source):(0) : {16 bytes} function:
(unknown source):(0) : {16 bytes} function:

If the "ninja.mesh" is removed then there is no memory leaks:

Code: Select all

	mName = "Ninja";
	mSceneMgr = pSceneMgr;
	mSceneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
	mEntity = mSceneMgr->createEntity(mName);
	mSceneNode->attachObject(mEntity);
	
	mSceneNode->detachObject(mEntity);
	mSceneMgr->destroyEntity(mEntity);
	mSceneMgr->destroySceneNode(mSceneNode);
How should I delete the entity so that memory doesn't leak? Any ideas will be appreciated!
User avatar
Daixiwen
Greenskin
Posts: 105
Joined: Fri Feb 08, 2013 11:30 am
Location: Oslo
x 16

Re: Memory leak when deleting entity

Post by Daixiwen »

Could the leak detection come from the fact that the mesh manager has loaded the ninja.mesh and kept it even after the entity was destroyed?
If you create several entities with the same mesh, does it still report 5 leaks?
If you remove the cached mesh data with MeshManager::remove() do you still have a leak?
Hardware, n.: part of the computer you can kick
Ogre22
Gnoblar
Posts: 2
Joined: Sun Jan 10, 2016 1:48 pm

Re: Memory leak when deleting entity

Post by Ogre22 »

Thanks for your support. I tried with the following code:

Code: Select all

mName = "Ninja";
	mSceneMgr = pSceneMgr;
	mSceneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
	mEntity = mSceneMgr->createEntity(mName, "ninja.mesh");
	mEntity2 = mSceneMgr->createEntity("asd", "ninja.mesh");
	mSceneNode->attachObject(mEntity);
	
	mSceneNode->detachObject(mEntity);
	mSceneMgr->destroyEntity(mEntity);
	mSceneMgr->destroySceneNode(mSceneNode);

	Ogre::MeshManager::getSingleton().getByName("ninja.mesh")->unload();
	Ogre::MeshManager::getSingleton().remove("ninja.mesh");
Still the same result: 5 leaks

If I set

Code: Select all

	mEntity2 = mSceneMgr->createEntity("asd", "robot.mesh");
then there are 10 leaks.

So seems like it really has something to do with the .mesh. How to correctly remove them from memory?
Post Reply