我在MS VC ++ 2005项目中启用了堆调试,当程序退出最后一个析构函数时,我调用了_CrtDumpMemoryLeaks()(也启用了_CRTDBG_MAP_ALLOC。但是后来我看到了以下调试断言屏幕:
之后我点击Retry来调试它,它带我去一些代码(这不是我的),我看到的东西:
char* name;
cstub.get("...", name);
delete [] name;
我在想,也许名字是在get(..)函数中分配的;无论如何,我的问题是:从屏幕截图来看这是一个内存/堆错误?我可能不得不深入研究cstub的get函数正在做什么。谢谢你的任何想法。
答案 0 :(得分:1)
您可能正在混合运行时。
如果分配器位于使用不同版本的Visual Studio编译的DLL中,则无法从代码中释放内存。
这就是为什么返回已分配内存的库还包括释放该内存的函数或方法。