删除指向自动变量的指针

Naw*_*waz 1 c++ runtime-error memory-corruption undefined-behavior delete-operator

请看这个代码

int i = 10;                                     //line 1 
int *p = &i;                                    //line 2  
delete p;                                       //line 3 
cout << "*p = " << *p << ", i = " << i << endl; //line 4  
i = 20;                                         //line 5  
cout << "*p = " << *p << ", i = " << i << endl; //line 6  
*p = 30;                                        //line 7
cout << "*p = " << *p << ", i = " << i << endl; //line 8  
Run Code Online (Sandbox Code Playgroud)

这段代码的结果是什么?特别是3号线,5号线和7号线?他们是否会调用未定义的行为?什么是输出?

编辑:我尝试使用g ++运行它,它正在编译并运行良好!我在Windows 7上使用MinGW.

标准在这方面说了些什么?

Chu*_*dad 5

如果您曾使用new动态分配指针,则只能删除指针.在这种情况下,您没有使用new分配指针,只是简单地定义并初始化它以指向int类型的局部变量.

在未使用new动态分配的指针上调用delete是一种称为未定义行为的东西.简而言之,这意味着当执行此类代码时,地球上的任何事情都可能发生,并且您无法向这个星球上的任何人投诉.