使用双指针取消分配内存



只是一个关于通过双指针解除分配的问题。

下面的基本例子正确吗?

#include <iostream>
int main()
{
int **d = { new int*[3] };
int * p = { new int[100] } ;
p[0] = 300;
int *x = new int(1);
d[0] = p;
d[1] = x;
// pointer in d[0] is a pointer to an array
// so use this:
delete[] d[0]; 
// pointer in d[1] is not a pointer to an array
// so use this:
delete d[1];  
std::cout << p[0] << " " << x << 'n';
}

您(尝试(在您的delete[] d[0];调用之后访问p[0],并且d[0]具有p地址作为其值,因此delete[]调用释放p内存。这意味着您的cout语句是未定义的行为(当我运行它时,我会得到p[0]的"随机"值(。

cout行移动到delete[] d[0]调用之前的,您将看到300的值。

此外,您永远不会释放d数组!将这一行添加到主菜单的末尾附近:delete[] d;

最新更新