掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
deleteの成功条件について教えてください (ID:71103)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
このコードではnewされたオブジェクトは解放されません。 delete[]が呼ばれた時点でpはNULLですから、 仕様に従い何も起こりません。(NULLに対してdeleteした場合は無視する) よってp2に保持されたオブジェクトは引き続き存続していて、 p2が消滅した(スコープから外れた)時点で解放するべきポインタを見失い、メモリリーク(解放ミス)となります。 解放するにはp2が消滅する前にdelete[] p2しなければいけません。 なお、C++言語では >2.deleteは成功しているので後はp2がスコープから外れればメモリは解放される というような状況は存在しません。 deleteが実行された時点からそのオブジェクトへのアクセスは認められず、 deleteされたポインタを保持するポインタ変数の消滅を待つことはありません。 したがって、p=NULLをせずにdelete[] pしたなら、p2も同時にアクセスできなくなります。 >1.確保したメモリが解放されていることの確認方法 deleteは正しく実行されれば必ず成功することになっている(はず)ですので、通常は確認する術はありません。 ただし、デバッグビルドしている場合、解放した領域を特徴的な値で埋め立てる場合があります。 デバッガを使ってそのような埋め立てが行われたかを見るという方法はあるかと思います。 >2.deleteの成功する条件 「対応するnew(deleteはnew、delete[]はnewの配列版)で確保し、newが返したポインタで、まだ解放されていないもの」、 またはNULL(無視されます)を渡した場合。 これを満たさないdeleteの使用は不定の結果となります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.