1

可能重复:
未定义、未指定和实现定义的行为

我知道在同一个对象上调用 delete 是灾难性的。但只要在第二次调用删除之前没有为其他对象重新分配内存,情况就是如此。但是,即使执行以下操作也是错误的?如果我删除 cout,代码不会转储核心。

int main()
{
    A *a1 = new A();
    delete a1;
    cout<<a1<<endl;
    delete a1;
}
4

1 回答 1

7

请参阅双重删除会发生什么?

是的,这是非常错误的。

最大的问题是行为未定义。因此,在一种情况下,您可能会在一个编译器上侥幸逃脱,但通常它往往会导致崩溃。

于 2012-06-26T17:53:51.197 回答