別のC++ポインター削除の質問は、次の例にあります。
class Foo {
public:
int *p;
~Foo() {
delete p; p = NULL;
}
};
Foo *f1 = new Foo();
Foo *f2 = new Foo();
f1->p = new int(1);
f2->p = f1->p;
delete f2; // ok
delete f1; // no error?
「deletef1」を呼び出したときにエラーが発生しなかったのはなぜですか?同じアドレス(* p)を2回削除しませんでしたか?
コードの最後の2行のポインターを直接削除すると、エラーが発生します。
delete f2->p; // ok
delete f1->p; // error!! *** glibc detected *** double free or corruption (fasttop) ***