CArray CListのメモリ開放に関して(2) – プログラミング – Home

CArray CListのメモリ開放に...
 
通知
すべてクリア

[解決済] CArray CListのメモリ開放に関して(2)


eizo
 eizo
(@eizo)
ゲスト
結合: 13年前
投稿: 13
Topic starter  

先ほどCArray CListのメモリ開放に関して(1)を投稿した者です。
VC++にて先ほどの自作クラスCLとは無関係な適当な関数内で以下を実行
した結果、③-1だとVSからメモリーリークがあったと言われないのですが
③-2だとメモリーリークがあると言われます。
CArrayですからRemoveAllと思いきや、newだからdeleteしないといけない
ようです。
そこで、
③ ③-1だとOKで③-2だとNGな理由を教えて頂けないでしょうか。
④私が良くわかってないせいか、こちらの投稿ではdelete x;でOKなのに
 投稿「CArray CListのメモリ開放に関して(1)」ではdelete x;で強制終了
 される理由が良くわかりません。
 また、RemoveAllでケリがつかない理由も教えて頂けないでしょうか。
⑤VSのデバッカーからメモリーリークを指摘された場合はリークがあり、
 指摘されない場合はリークはないと信じても問題ないでしょうか。

以下適当な1つの関数内にて記述
CArray <double, double> *x = new CArray <double, double>;
for (int i = 0; i < 10; i++){
x->Add(i);
}
delete x; //③-1これだとメモリーリークを指摘されない
// x->RemoveAll(); //③-2この場合メモリーリーク


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

new CArray で箱を作り
Add で箱に中身を入れ
RemoveAll で箱の中身を捨てる
だけだと、箱が残る、すなわちリーク。
箱も捨ててよい・捨てるべきなら delete が必要。


返信引用
eizo
 eizo
(@eizo)
ゲスト
結合: 13年前
投稿: 13
Topic starter  

tetrapodさん>
ご回答有難うございます。
本件に関しては中身と箱の両方を捨てることで
了解致しました。有難う御座います。
今動作確認しましたが、ご指摘のように
x->RemoveAll();
delete x;

delete x;
ならばメモリーリークしないようです。
しかし、上記ですべて完結すれば納得できるのですが
投稿(1)のほうでは CL::~CL()デストラクタ内で
同様の定義をしても強制終了されてしまい良くわからない
状況です。基本的な質問かもしれませんが宜しくお願い致します。


返信引用
eizo
 eizo
(@eizo)
ゲスト
結合: 13年前
投稿: 13
Topic starter  

本件「CArray CListのメモリ開放に関して(1)」にて解決致しました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました