我有一个例子:
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],但我为其分配了一个新值。
如果使用new[]
动态分配数组,则必须使用delete[]
删除它,这将释放整个数组。您不能释放单个元素。您的代码具有未定义的行为,因为您使用的是delete
而不是delete[]
,因此任何事情都可能发生。仅因为它似乎起作用并不意味着它是正确的。