当我们手头有动态指针数组时,假设我们要删除该数组的第三个索引,并将较高的指针复制到一个槽中。
Q1:我们需要删除第三个元素吗?
Q2:在我们删除aPtr3并为aPtr3分配新指针之后会发生什么?
代码部分做我想做的事情吗?
“”“
A **aPtr = new A*[10];
for(int i=0; i< 10; i++)
{
aPtr[i] = new A;
}
delete aPtr[3];
for(int i=3; i<9; i++)
{
aPtr[i] = aPtr[i+1];
}
“”“
另一个问题,不考虑前一个问题。当我们要删除指针数组中的所有元素时,是否也需要语句"delete [] aPtr;“?
“”“
A **aPtr = new A*[10];
for(int i=0; i< 10; i++)
{
aPtr[i] = new A;
}
for(int i=0; i<10; i++)
{
delete aPtr[i];
}
delete[] aPtr; //<-----Is this line required to free the memory?
“”“
发布于 2022-04-16 16:07:27
除了一个例外,您的代码看起来不错。
delete aPtr[3];
for(int i=3; i<9; i++)
{
aPtr[i] = aPtr[i+1];
}
添加以下内容:
aPtr[9] = nullptr;
否则,aPtr8和aPtr9都指向相同的位置,稍后当您删除整个事件时,您将双删除该指针。
否则,它看起来不错。
https://stackoverflow.com/questions/71896325
复制