我一直在一個項目中工作,但最近我檢查我的程序是否有泄漏,結果是泄漏和很多。在C++中泄漏內存有了boost :: ptr_vector
我用_CrtDumpMemoryLeaks();
來接收所有泄漏的信息,我檢查他們中的大多數與boost有關,我知道它一定是我的問題,但我不明白爲什麼它泄漏。
在調試輸出顯示我這些行:
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
這使我相信,問題出在哪裏我使用這些字符串,並與第一個電話是在這些線路:
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);
和實際功能addLayerToList
是下一個:
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));
}
layersList是這樣定義:
boost::ptr_vector<Layer> layersList;
也許,是我誤會指針的所有權加速是如何工作的,但在例子我最近查,這是通過對象的所有權給ptr_vector
一個正確的方法, 我錯了嗎?
而我的另一個問題是,如果有必要釋放向量的指針,或者最好讓auto_ptr
做他的工作?
感謝您的幫助。
你的代碼是正確的,'ptr_vector'將在釋放時釋放內存。你確定layersList在你調用'_CrtDumpMemoryLeaks'的時候已經被破壞了嗎? –
據我所知,一個ptr_vector的破壞可以通過一個layersList.clear()來實現,對嗎?_CrtDumpMemoryLeaks在存儲那個被清理的ptr_vector的類之後被調用。 –
如何定義圖層?它基類使用虛擬析構函數嗎? –