我有一个定义为 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/