|
下面这段代码我连续执行大概2000000多次,程序内存耗尽,达到2G,之后申请内存失败,我确实对创建和释放是否一一对应是有怀疑,但又不了解具体是哪里的问题,拜托各位帮我看看是那个地方可能没有释放?
我用了_CrtSetDbgFlag的函数来检测内存泄露,但是没有检测出来。
// 创建
m_pMaterial = MaterialManager::getSingleton().create( m_szName, ResourceGroupManager: EFAULT_RESOURCE_GROUP_NAME );
m_pMaterial->setLightingEnabled( false );
m_pPass = m_pMaterial->getTechnique(0)->getPass(0);
m_pPass->setSceneBlending( SBT_TRANSPARENT_ALPHA );
pTUS = m_pPass->createTextureUnitState( szFileName );
m_pTexture = pTUS->_getTexturePtr(0);
m_pBuffer = m_pTexture->getBuffer();
m_pBuffer->lock( HardwareBuffer::HBL_DISCARD );
const PixelBox &pb = m_pBuffer->getCurrentLock();
w = pb.getWidth();
h = pb.getHeight();
m_pBuffer->unlock();
m_pOverlay = OverlayManager::getSingletonPtr()->create( m_szName );
m_pElement = (PanelOverlayElement*)OverlayManager::getSingleton().createOverlayElement( " anel", m_szName );
m_pElement->setMetricsMode( GMM_PIXELS );
m_pElement->setVerticalAlignment( GVA_TOP );
m_pElement->setPosition( 0, 0 );
m_pElement->setWidth( 1 );
m_pElement->setHeight( 1 );
m_pOverlay->add2D( (OverlayContainer*)m_pOgreElement );
m_pOverlay->setZOrder( iZOrder );
m_pElement->SetMaterial( pMaterial );
// 释放
if( m_pTUS->getNumFrames() )
m_pTUS->deleteFrameTextureName( 0 );
m_pTexture.setNull();
m_pBuffer.setNull();
Ogre::TextureManager::getSingleton().remove( m_szName );
m_pPass->removeAllTextureUnitStates();
MaterialManager::getSingleton().remove( m_szName );//*(ResourcePtr*)&
m_pMaterial.setNull();
OverlayManager::getSingleton().destroyOverlayElement( m_pElement );
OverlayManager::getSingletonPtr()->destroy( m_szName );
为了进一步确定,我又做了一次删减后的测试。剩下下面的代码
// 创建
m_pMaterial = MaterialManager::getSingleton().create( m_szName, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
m_pMaterial->setLightingEnabled( false );
m_pPass = m_pMaterial->getTechnique(0)->getPass(0);
m_pPass->setSceneBlending( SBT_TRANSPARENT_ALPHA );
// 释放
m_pPass->removeAllTextureUnitStates();
MaterialManager::getSingleton().remove( m_szName );//*(ResourcePtr*)&
m_pMaterial.setNull();
这段代码要执行5000000多次才出现内存耗尽,但终归也是有内存泄露。我推断这一创建一释放之后似乎还有200多个字节的内存泄露,那到底是出在什么地方呢? |
|