【发布时间】:2020-03-24 23:53:35
【问题描述】:
我有一个例子:
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;
上面代码的结果:
00529EF0 5
00529EF0 -572662307
00529EF0 5
//Where the code stop
我不知道为什么它会导致我出现错误?它不允许我第二次删除arr[0],即使第一次成功删除并且我为它分配了一个新值。
【问题讨论】:
-
仅仅因为它看起来像第一个
delete有效,并不意味着它有效。你想完成什么? -
你
delete某事,然后继续进行,就好像那件事仍然有效一样。事情爆炸的基本配方。我认为由你来解释为什么你认为这应该有效。 (忘记第二次删除;为什么delete &X;后跟X = 5;形式的东西会起作用?)
标签: c++ memory memory-management