在 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;
因此 dynArrTwo 和 dynArrOne 现在指向堆中的相同地址。如果我写:delete [] dynArrOne;
,堆中的内存将被释放。麻烦的是我无法通过 dynArrTwo: delete [] dynArrTwo
释放堆中的内存。我的意思是,为什么会这样?为什么我不能通过 dynArrTwo 在堆中释放内存?
当您对指针进行 复制 时,这就是您正在做的全部 - 您不是 复制指向的内存。
因此,您的语句 int *dynArrTwo = dynArrOne;
只是复制存储在 RHS 指针中的 地址 。当任一个变量指向的内存随着delete[]
操作释放后,那么两个指针都会失效。
这样想:我可以把房子的地址(相同地址,相同房子)写在两个几张纸,给两个不同的拆迁人每人一张纸。如果这些拆迁人中的第一个去拆了房子,那么第二个就不能,以后,也去做同样的事情-他可以吗?
我对 C++ 中的 delete[] 运算符感到困惑。我知道解除分配动态内存(堆)的目的。但是我试过下面这段代码,发现了一些麻烦:
int *dynArrOne = new int[10];
int *dynArrTwo = nullptr;
因此它从堆栈中的指针 dynArrOne 在堆中创建了 10 个新地址。然后我写道:
int *dynArrOne = new int[10];
int *dynArrTwo = dynArrOne;
因此 dynArrTwo 和 dynArrOne 现在指向堆中的相同地址。如果我写:delete [] dynArrOne;
,堆中的内存将被释放。麻烦的是我无法通过 dynArrTwo: delete [] dynArrTwo
释放堆中的内存。我的意思是,为什么会这样?为什么我不能通过 dynArrTwo 在堆中释放内存?
当您对指针进行 复制 时,这就是您正在做的全部 - 您不是 复制指向的内存。
因此,您的语句 int *dynArrTwo = dynArrOne;
只是复制存储在 RHS 指针中的 地址 。当任一个变量指向的内存随着delete[]
操作释放后,那么两个指针都会失效。
这样想:我可以把房子的地址(相同地址,相同房子)写在两个几张纸,给两个不同的拆迁人每人一张纸。如果这些拆迁人中的第一个去拆了房子,那么第二个就不能,以后,也去做同样的事情-他可以吗?