为什么我没有在下面的列表中分配或添加任何元素就得到内存泄漏错误。我应该忽略它吗?
#define CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <list>
using std::list;
int main()
{
list <char*> roots;
_CrtDumpMemoryLeaks();
}发布于 2010-04-16 21:52:19
在检查内存泄漏之前,您不会让roots变量有机会被销毁。如果roots首先被销毁,您应该会注意到所有东西都被清理干净了。试试这个吧。
#define CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <list>
using std::list;
int main()
{
{
list <char*> roots;
}
_CrtDumpMemoryLeaks();
}发布于 2010-04-16 21:52:12
当您调用_CrtDumpMemoryLeaks时,list还没有被销毁,所以它执行的任何分配都会被视为内存泄漏。这与char*无关:同样的事情也会发生在list<int>上。
_CrtDumpMemoryLeaks只是报告尚未释放的任何分配。它没有办法知道list析构函数还没有运行并执行释放。
发布于 2010-04-16 21:50:39
如果您使用C++,那么使用std::string而不是char*可能是更好的做法。
无论如何,您必须了解容器保存的是指向字符的指针,而不是字符本身。因此,在销毁时,它将释放指针占用的内存,但不会释放指向的内存。
简而言之,在销毁/清除列表之前,要由您来释放每个字符。
https://stackoverflow.com/questions/2653334
复制相似问题