1

重複の可能性:
未定義、未指定、および実装定義の動作

同じオブジェクトで削除を呼び出すのは悲惨なことです。ただし、delete の 2 回目の呼び出しの前に、メモリが他のオブジェクトに再割り当てされない限り、これは当てはまります。しかし、以下のことをしても間違っていますか?cout を削除すると、コードはコアをダンプしません。

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

1 に答える 1

7

二重削除で何が起こるかを参照してください。:

はい、それは非常に間違っています。

大きな問題は、動作が定義されていないことです。そのため、1 つのコンパイラで 1 つの状況で問題を回避できる場合もありますが、一般的にはクラッシュを引き起こす傾向があります。

于 2012-06-26T17:53:51.197 に答える