gpt4 book ai didi

c++ - ptr_vector - _CrtDumpMemoryLeaks() - 即使调用析构函数也会发生内存泄漏

转载 作者:行者123 更新时间:2023-11-28 03:56:47 24 4
gpt4 key购买 nike

我正在开发游戏引擎,在之前的一个问题中有人建议我开始使用 boost::ptr_vector 来维护指针列表。

基本思路是有几个State的,每个State有一个SceneGraph。每个状态都有几个它们初始化的资源,然后填充它自己的 SceneGraph。 SceneGraph 有一个用于填充资源指针的 boost::ptr_vector。

相关代码如下:

在 TestState 中创建资源并添加到 SceneGraph

backgroundImage = new DEBUG_NEW Fenris::Node2D::Image(std::string("backgroundImage"), std::string("../media/img/background.jpg"));
sceneGraph->addNode(backgroundImage, Fenris::Core::STRATUM_BACK);

场景图

boost::ptr_vector<SceneGraphNode> backStratumList;<br/>
// The add() method<br/>
void addNode(SceneGraphNode *pNode, STRATUM_TYPE stratumType) {
switch(stratumType) {
case STRATUM_BACK:
backStratumList.push_back(pNode);
break;
case STRATUM_NORMAL:
normalStratumList.push_back(pNode);
break;
case STRATUM_FOREGROUND:
foregroundStratumList.push_back(pNode);
break;
}
}

使用相关行编辑 main.cpp

PlatformGame::State::TestState *testState = new DEBUG_NEW PlatformGame::State::TestState(std::string("testState"));<br/>
// Clean up the previously registered state (deletes its sceneGraph -- verified that the destructor is in fact called via debugger)
delete testState;<br/>
// Dump memleak report if we're running in debug mode
#ifdef _DEBUG
_CrtDumpMemoryLeaks();
#endif

我正在使用 _CrtDumpMemoryLeaks() 输出内存泄漏日志报告。日志报告告诉我内存泄漏;

Detected memory leaks!Dumping objects ->{174} normal block at 0x00A56630, 32 bytes long. Data: <../media/img/bac> 2E 2E 2F 6D 65 64 69 61 2F 69 6D 67 2F 62 61 63 {173} normal block at 0x00A565A0, 8 bytes long. Data: < c      > A8 63 A5 00 00 00 00 00 Object dump complete.

是 _CrtDumpMemoryLeaks() 对 boost::ptr_vector 有问题还是我做错了什么?调试器告诉我 State 确实调用了它的析构函数(它具有;删除 sceneGraph)并且我还验证了 SceneGraph 的析构函数也被调用了。

非常感谢任何帮助,我很乐意看到一个空的内存泄漏报告:-)

最佳答案

它看起来肯定不像是您泄漏的 vector 。请注意,该字符串是可读的,这至少是一个提示。

如果你能得到花括号之间的数字 stable ("{173}") 那么你就可以在分配内存时得到一个断点。将其放入您的 main() 函数中:

_crtBreakAlloc = 173;

使用 #include <crtdbg.h>如有必要。重复 174 以找到另一个。

关于c++ - ptr_vector - _CrtDumpMemoryLeaks() - 即使调用析构函数也会发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3241494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com