掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
メモリリークについて (ID:39697)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>やましんさん TListSortedが初期状態で重複を許さない設定になっているため、 ls.Addの戻り値が-1の場合、重複で追加されないpccがどんどん溜まるのが原因だと思われます。 ですので、 ls.Add(pcc); を、 if ls.Add(pcc) = -1 then Dispose(pcc); と書き換えることでリークが解消できるはずです。 >torさん >Disposeに与えるポインタは正しい型の変数でなくてはいけません。 >× Dispose(PColorCount(ls[nnum])); >○ var pcc: PColorCount; pcc := PColorCount(ls[nnum]); Dispose(pcc); これは間違いです。 Disposeに与えるポインタはキャストで問題ありません。 Disposeの実装は動的な型(stringなど)が含まれない場合、単なるFreeMemです。 キャストした場合はキャストした型の実体サイズがFreeMemのサイズとして用いられます。 これは実行時にCPUウィンドウを見ることで簡単に確認できます。 また、汎用ポインタを渡した場合はFreeMemにポインタだけ渡した場合と同じように処理されるため、 今回の場合はキャストをしなくても正しく解放することが可能です。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.