c++ - 如何释放指针数组指向的结构的内存?

标签 c++ windows visual-studio-2008 memory-management

我有一个定义为 some_struct * t_ptr[1000] 的指针数组,它指向一个结构 some_struct。并且点数组的一些点被评估。例如

some_struct * wpaper1 = new some_struct();    //memory leaks detected in this line 
wpaper1->tAnswer = useransw;
wpaper1->tKey = key;
t_ptr[100] = wpaper1;

//there're wpaper2,wpaper3....
...

delete[] t_ptr;   //release the pointers

调试消息说在第一行代码中检测到内存泄漏。那么如何释放t_ptr数组指向的some_struct的内存呢?必须使用循环来检测元素是否被评估然后删除它?我在 Windows 上使用 VS2008。谢谢。

最佳答案

只有在堆上分配了 t_ptr 时,您的 delete[] t_ptr 才会正确,唉:

some_struct* t_ptr = new tpr[1000];

然后,delete[] 语句释放这 1000 个指针的内存,但不对指针本身可能引用的任何内存做任何事情。要释放它,您需要首先遍历 t_ptr 元素,将它们一个一个地删除:

for (i = 0; i < 1000; ++i)
    delete t_ptr[i];
delete[] t_ptr;

您必须确保指针最初设置为 NULL,尽管删除 NULL 指针是空操作,因此您不需要检查上面的循环。

这不是很痛苦吗?这就是为什么对于新的 C++ 程序员来说,一个非常好的指南是使用 vector 和智能指针(例如来自 boost)。这些类型在超出范围或程序退出时自行释放......您甚至不必考虑它。

关于c++ - 如何释放指针数组指向的结构的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562471/

相关文章:

c++ - 如何使用元编程过滤 const 类型和非 const 类型?

c++ - 在运算符 new 的重载中调用 new 表达式

C++ printf %p 说明符在 Linux 和 Windows 中的行为不同

c# - 安装完成后如何运行批处理脚本?

c++ - adjacency_list 与 VertexList 不同于 vecS

近似空闲存储(堆)大小的 C++ 程序

windows - 在 Windows 中获取安全的临时文件夹

python - 为什么 wxGridSizer 在 wxDialog 上的初始化比在 wxFrame 上的初始化慢得多?

visual-studio-2008 - 将 .rptproj 从 VS2005 转换为 VS2008

c++ - 头文件中的智能感知