c++ - 将内存分配给一个指针,将另一个指针指向同一个指针并删除第二个

标签 c++ pointers memory-management dynamic-arrays

这样的代码会进行适当的内存释放吗?

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;

我正在使用 pointerA 创建指针,但使用 pointerB 释放。 pointerB 指向与 pointerA 相同的位置。

我认为它应该正确解除分配,但我想确认一下。有什么方法可以有效地测试它吗?也许创建一个巨大的数组然后检查内存使用情况???

谢谢

最佳答案

是的,您的代码示例将正确地释放所有已分配的内存。

如果要在 pointerA 设置为 NULL 之前的行上设置断点,并比较 pointerA 的内存地址>pointerB 指向,你会看到它们指向内存中的相同位置。因此,使用哪个变量删除内存并不重要,因为在任何一种情况下都会删除内存中的相同位置。

关于c++ - 将内存分配给一个指针,将另一个指针指向同一个指针并删除第二个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23702780/

相关文章:

javascript - 将值从 Javascript 返回到 C++

c++ - ros 到 opencv 图像转换器中的 undefined reference 错误

c++ - 在 C++ 中创建大小为 66000 X 66000 的二维数组

c - 在c中打印链表值时出现奇怪的值

c++ - 内存管理 : scope and local pointer variable

c++: std::map 数字 id 的迭代排序 - 交叉编译器

C++:将 master 的指针传递给 worker

在C中逐个字符地将字符串的一部分复制到新字符串中

ruby - 获取共享数组空间的memsize

android - 在 android 中使用 malloc/free