当我们在指向未使用new运算符分配的对象的指针上使用delete时会发生什么?

Shr*_*yas -3 c++ new-operator delete-operator

下面的代码编译正常,但不执行

#include <iostream>
using namespace std;

int main()
{
    int *a;
    int b = 5;
    a = &b;
    cout << *a << endl;
    delete a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

int main()
{
    int *a = 0;
    delete a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这很好用.为什么会这样?

Hen*_*nno 6

在编辑之后,您只有一个未定义行为的情况: delete您没有获取的内存new.

delete在NULL指针上保证不会造成伤害.但是delete在内存上你没有分配或删除之前未定义.我知道的实现会以某种访问冲突的方式退出程序.