【发布时间】:2015-01-15 23:25:06
【问题描述】:
以下代码给了我内存泄漏(使用 Visual Studio):
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <vector>
#include <memory>
struct Listener {};
struct Subject
{
std::vector<Listener*> listeners;
};
int main(void)
{
Subject subject;
_CrtDumpMemoryLeaks();
return 1;
}
我认为这是因为当 Subject 类被实例化时,STL 向量容器正在使用堆上的内存。如何确保程序退出时向量容器被销毁? (我已经尝试删除 Subject 析构函数中的容器,但这似乎不起作用)。
【问题讨论】:
-
-1 到 MS 用于将此函数命名为
DumpMemoryLeaks而不是ReportAllocatedMemory。 -
_CrtDumpMemoryLeaks通过统计新闻并确保它们都匹配来检测泄漏。因为subject永远不会超出范围,我猜它被视为优秀的参考。试试int main(void) {{Subject subject;}_CrtDumpMemoryLeaks(); return 1}
标签: c++ memory-leaks stl