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

问题描述 投票:1回答:1

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

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

因此,它将在堆栈中通过指针dynArrOne在堆中创建10个新地址。然后我写道:

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

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

memory-management memory-leaks free dynamic-arrays delete-operator
1个回答
0
投票

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

因此,您的语句int *dynArrTwo = dynArrOne;只是复制存储在RHS指针中的

地址

。当通过delete[]操作释放任一变量所指向的内存时,两个指针都将变为无效。这样想:我可以在两张纸上写下房子的地址(

same

地址,same房子),然后每张纸给两个不同拆除人员。如果这些拆迁人员中的第一个去拆房,那么第二个就不能,以后再去做-他可以吗?
© www.soinside.com 2019 - 2024. All rights reserved.