理論的には
free(ptr);
free(ptr);
すでに解放されているメモリを解放しているため、メモリ破損です。
しかし、もし
free(ptr);
ptr=NULL;
free(ptr);
OSは未定義の方法で動作するので、何が起こっているのかについてこれに関する実際の理論的分析を得ることができません。私が何をしていても、このメモリ破損はありますか?
NULLポインタの解放は有効ですか?
delete NULL
C ++では無効です。deleteは具象型のnullポインター値に適用できますが、には適用できませんNULL
。delete (int*) NULL
は合法ですが、ではありませんdelete NULL
。
ptr
メモリをポイントしfree
、それを呼び出さない場合、メモリがリークします。それをNULL
メモリのハンドルを失うだけに設定すると、リークします。場合ptr
であることを起こるNULL
、呼び出しはfree
無操作です。
free(ptr)
とptr = NULL
。誰もそのようなことは何も言わなかった。