c++ - 内存释放双向链表C++

标签 c++ pointers memory-leaks linked-list valgrind

出于学习目的,我已经创建了自己的双向链表实现。我正在做一些测试以确保内存被正确释放。在 main.cpp 中,我有以下内容:

list<int> pointer;
int *x = new int(1);
int *y = new int(2);
int *z = new int(3);
pointer.insertBack(*x);
pointer.insertBack(*y);
pointer.insertBack(*z);
pointer.printForward();
pointer.printReverse();

显然,由于调用 new,正在分配内存。我是否必须在所有这些代码之后调用 delete 自己,或者列表的析构函数是否应该处理内存释放?如果我使用 int 而不是指针,则不会发现内存泄漏。我正在使用 valgrind 检查内存泄漏。

最佳答案

如果您在列表中存储指向数据的指针,您必须自己删除该数据,列表不会(或不应该)为您做这件事。
最好的方法是获取数据,使用它,然后在同一个函数中删除它。

另外,根据您对链表的实现,您可能必须在内部删除链表中每个节点正在使用的内存。

如果你说的是删除列表,如果你不需要数据,你应该在删除列表之前删除它。

关于c++ - 内存释放双向链表C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16680976/

相关文章:

c++ - LPCSTR 函数的返回值变得无用

c - 指向结构的指针是指向其第一个成员的指针吗?

c++ - 将 C++ 实例方法分配给全局函数指针?

c - 为什么我在这里遇到内存访问冲突?

c++ - Visual Studio C++ 项目中的奇怪内存泄漏

android - 使用范围 Dagger 2 避免 Activity 泄漏

c++ - 从几个基类覆盖虚函数

c++ - 在文件中设置位置且无法读回

c++ - 如何使用 C++ 中的 Eigen 库创建高效的 3D 矩阵?

c - 表示图形时下一个指针出错