在这里如果我使用delete或delete[]输出仍然是70.我能知道为什么吗?
#include<iostream>
using namespace std;
int main()
{
int* c = new int[100];
for(int i=0; i<98; i++)
{
c[i] = i;
}
cout<<c[70]<<endl;
delete[] c;
or
delete c;
cout<<c[70]<<endl; //outputs 70 even after delete[] or delete
return 0;
}
Run Code Online (Sandbox Code Playgroud)
访问已删除的内存是未定义的行为.用错误删除delete也是UB.任何进一步的讨论都是毫无意义的,因为你无法可靠地期待任何结果.
在许多情况下,UB只会做"正确"的 事情,但你需要意识到这完全是"偶然"并且可能会随着另一个编译器,同一编译器的另一个版本,天气而改变......为了得到正确的代码,你需要避免所有 UB的情况,甚至那些看似有用的情况.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |