首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用std::list中的类型字符指针检测到内存泄漏

使用std::list中的类型字符指针检测到内存泄漏
EN

Stack Overflow用户
提问于 2010-04-16 21:45:45
回答 4查看 408关注 0票数 1

为什么我没有在下面的列表中分配或添加任何元素就得到内存泄漏错误。我应该忽略它吗?

代码语言:javascript
复制
#define CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <list>
using std::list;

int main()
{
    list <char*> roots;

    _CrtDumpMemoryLeaks();
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-16 21:52:19

在检查内存泄漏之前,您不会让roots变量有机会被销毁。如果roots首先被销毁,您应该会注意到所有东西都被清理干净了。试试这个吧。

代码语言:javascript
复制
#define CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <list>
using std::list;

int main()
{
    {
        list <char*> roots;
    }

    _CrtDumpMemoryLeaks();
}
票数 11
EN

Stack Overflow用户

发布于 2010-04-16 21:52:12

当您调用_CrtDumpMemoryLeaks时,list还没有被销毁,所以它执行的任何分配都会被视为内存泄漏。这与char*无关:同样的事情也会发生在list<int>上。

_CrtDumpMemoryLeaks只是报告尚未释放的任何分配。它没有办法知道list析构函数还没有运行并执行释放。

票数 3
EN

Stack Overflow用户

发布于 2010-04-16 21:50:39

如果您使用C++,那么使用std::string而不是char*可能是更好的做法。

无论如何,您必须了解容器保存的是指向字符的指针,而不是字符本身。因此,在销毁时,它将释放指针占用的内存,但不会释放指向的内存。

简而言之,在销毁/清除列表之前,要由您来释放每个字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2653334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档