【发布时间】:2014-05-16 19:00:49
【问题描述】:
这样的代码会进行适当的内存释放吗?
int main(){
int *pointerA, *pointerB;
pointerA = new int[15]();
for (int i=0; i<15; i++)
pointerA[i] = i*2;
pointerB = pointerA;
if (pointerA != NULL)
pointerA = NULL;
// Some operation here ...
for (int i=0; i<15; i++)
std::cout << i << " : " << pointerB[i] << std::endl;
if (pointerB != NULL)
delete [] pointerB;
pointerB = NULL;
return 0;
}
我正在使用指针 A 创建一个指针,但使用指针 B 进行释放。指针B 指向与指针A 相同的位置。
我认为它应该正确释放,但想确定一下。有没有办法可以有效地测试它?也许创建一个巨大的数组然后检查内存使用情况???
谢谢
【问题讨论】:
-
这和你想象的完全一样。但你不应该在意。使用向量或 unique_ptr 或 shared_ptr 并停止考虑指针。
-
删除由另一个指针分配的内存完全没问题,这就是你在这里所做的。
-
我建议学习语言基础知识以避免用完全没有意义的东西混淆你的代码。
if(pointerA == NULL) pointerA = NULL;完全等同于pointerA = NULL;。同样,NULL在delete之前的检查是多余的,delete保证不会对空指针执行任何操作。特别是因为你一直在访问pointerB后面的内存之前你问它是否是NULL;如果它有任何机会成为NULL,那么您已经触发了未定义的行为。
标签: c++ pointers memory-management dynamic-arrays