如何修复C ++项目中的内存泄漏?

时间:2015-05-31 10:48:11

标签: c++ memory-leaks

我有非常简单的代码段:

var mixedList = new List<dynamic>();
mixedList.AddRange(quotes);
mixedList.AddRange(notes);
mixedList.Sort((a, b)=>a.DateOfAdding.CompareTo(b.DateOfAdding));

我不明白,为什么存在内存泄漏。在程序生命结束时删除了两个原始指针。也许我不应该在构造函数的初始化列表中创建指针?

2 个答案:

答案 0 :(得分:2)

Are there any issues with allocating memory within constructor initialization lists?

尝试切换到真正的智能指针,也许你得到的内存泄漏是警告,而不是当时的实际泄漏?

答案 1 :(得分:2)

我没有使用g ++ 4.8.2 + valgrind 3.10来获取内存泄漏。

我在使用CRTDBG_MAP_ALLOC进行VS 2015 EE检测时得到了它,但这是误报。

删除指针后将str_buffer_设置为nullptr,然后显式调用析构函数:a.~simple_string();,它将第二次调用析构函数两次,但是它将没有显示任何内存泄漏是因为在输出内存泄漏结果之前第一次调用析构函数。

编辑:通过在函数中创建simple_string对象而不是在main()中创建void foo() { simple_string a(3, 'a'); } int main() { foo(); return 0; } 对象,可以将此误报内存泄漏工作(至少在VS2015 EE中):

y