在C ++中取消分配内存的问题(删除运算符)

我对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 在堆中释放内存?

erpangm 回答:在C ++中取消分配内存的问题(删除运算符)

当您创建指针的副本时,这就是您要做的所有-您正在 not 复制内存,指向。

因此,您的语句int *dynArrTwo = dynArrOne;只是复制了RHS指针中存储的地址。当通过delete[]操作释放 变量所指向的内存时,两个指针都将变为无效。

这样想:我可以在两张纸上写下房子的地址(相同地址,相同房子),然后给一个纸,分别送给两名不同拆迁人员。如果这些拆迁人员中的第一个去拆房,那么第二个就不能,以后再去做,可以吗?

本文链接:https://www.f2er.com/2925246.html

大家都在问