删除数组类型指针的元素会导致错误?

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

我有一个例子:

int* arr = new int[1];
//First Time
arr[0] = 5;
cout << &arr[0] << " " << arr[0] << endl;
delete &arr[0];
cout << &arr[0] << " " << arr[0] << endl;

//Second time
arr[0] = 5;
cout << &arr[0] << " " << arr[0] << endl;
delete &arr[0]; //Error from here
cout << &arr[0] << " " << arr[0] << endl;

The result from the code above:
00529EF0 5
00529EF0 -572662307
00529EF0 5
//Where the code stop

我不知道为什么会导致我出错?即使第一次成功删除arr [0],也不允许我第二次删除arr [0],但我为其分配了一个新值。

c++ memory memory-management
1个回答
2
投票

如果使用new[]动态分配数组,则必须使用delete[]删除它,这将释放整个数组。您不能释放单个元素。您的代码具有未定义的行为,因为您使用的是delete而不是delete[],因此任何事情都可能发生。仅因为它似乎起作用并不意味着它是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.