掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TObjectListにFreeは不要? (ID:26009)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
この様な問題が発生した場合は,単純なコードで確認するのが定石です. つまり,問題の切り分けが必要です. ただ,この場合,必ず「新規作成」のプロジェクトで実験するのが常道です. (どちらも当たり前ですが,でなければ犯人探しが困難ですからね) タイトルが「TObjectListにFreeは不要?」となっていますが,Createして使用 したオブジェクトは必ず解放します. TFooClassが不明なので勝手に作成して実験したコードが以下です.エラーは でません.メモリの解放忘れもありません. WindowsXP(SP2) + Delphi7 + FastMM4 で確認 ということは,「TObjectListにFreeは不要?」というDiphiに対する疑惑は晴れる ことになります.したがって,問題は他のコードにあることになります. ただし,sago さんの環境で以下のコードで同じ問題が発生するのであれば,間違い なく環境( Windowsあるいは Delphi ) に問題があります. type //TObjectListはContnrs.pasに TFooClass = class(TObject) protected FNum : Integer; FMoji : String; public property Num : Integer read FNum write FNum; property Moji : String read FMoji write FMoji; end; TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private 宣言 } public { Public 宣言 } FooList: TObjectList; FooClass: TFooClass; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i : Integer; Str1 : String; Str2 : String; begin FooList:=TObjectList.Create; for i:=0 to 9 do begin FooClass:=TFooClass.Create; FooList.Add(FooClass); TFooClass(FooList.Items[i]).Num:=i*100; TFooClass(FooList.Items[i]).Moji:=Chr($41)+IntToStr(i+1); end; ListBox1.Items.Clear; for i:=0 to FooList.Count-1 do begin Str1:=Format('%.8d',[TFooClass(FooList.Items[i]).Num]); Str2:=TFooClass(FooList.Items[i]).Moji; ListBox1.Items.Add(Str1+' '+Str2); end; end; // Createして使用したものは必ず解放 // アプリ終了時はDelphiが自動的に解放してくれるが,アプリのどこで使用するか // 不明なので解放した方がメモリの増大を未然に防止可能 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FooList.Free; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.