如何释放指针数组所指向的结构的内存?

时间:2010-08-25 02:34:25

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

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

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

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

2 个答案:

答案 0 :(得分:2)

如果你在堆上分配了t_ptr,那么你的delete [] t_ptr只会是正确的,ala:

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 ++程序员指南是使用向量和智能指针(例如来自boost)。当这些类型超出范围或程序退出时,这些类型会自行释放...您甚至不必考虑它。

答案 1 :(得分:1)

是的,您必须迭代t_ptr,并删除任何非NULL的元素(假设您在开始分配之前已将元素初始化为NULL)。您应该能够在代码中识别每个delete与每个new匹配的位置。