在 C++ 中释放内存的问题(删除运算符)

Problems with deallocating memory in C++ (delete operator)

我对 C++ 中的 delete[] 运算符感到困惑。我知道解除分配动态内存(堆)的目的。但是我试过下面这段代码,发现了一些麻烦:

int *dynArrOne = new int[10];
int *dynArrTwo = nullptr;

因此它从堆栈中的指针 dynArrOne 在堆中创建了 10 个新地址。然后我写道:

int *dynArrOne = new int[10];
int *dynArrTwo = dynArrOne;

因此 dynArrTwodynArrOne 现在指向堆中的相同地址。如果我写:delete [] dynArrOne;,堆中的内存将被释放。麻烦的是我无法通过 dynArrTwo: delete [] dynArrTwo 释放堆中的内存。我的意思是,为什么会这样?为什么我不能通过 dynArrTwo 在堆中释放内存?

当您对指针进行 复制 时,这就是您正在做的全部 - 您不是 复制指向的内存。

因此,您的语句 int *dynArrTwo = dynArrOne; 只是复制存储在 RHS 指针中的 地址 。当任一个变量指向的内存随着delete[]操作释放后,那么两个指针都会失效。

这样想:我可以把房子的地址(相同地址,相同房子)写在两个几张纸,给两个不同的拆迁人每人一张纸。如果这些拆迁人中的第一个去拆了房子,那么第二个就不能,以后,也去做同样的事情-他可以吗?