Freeについて

解決


message  2007-01-29 10:22:54  No: 24637  IP: 192.*.*.*

お世話になってます。

メソッドの”Free”をヘルプで調べてみたのですが、
”オブジェクトを破棄し、必要ならば関連付けられているメモリを開放します。”とあります。・・・つまりどういうことですか?

編集 削除
deldel  2007-01-29 10:29:33  No: 24638  IP: 192.*.*.*

ごく簡単にいえば、
「無かった状態に戻す」
ということです。

編集 削除
message  2007-01-29 11:25:04  No: 24639  IP: 192.*.*.*

ではですね、

procedure TForm1.Button1Click(Sender: TObject);
var
  list: TStringList;
  index: Integer;
  i: Integer;
begin
  list := TStringList.Create;

  list.Add('Hello');
  list.Add('hoge');
  list.Add('Good');
  list.Add('Delphi');

  list.Sort;
 
  if list.Find('hoge', index) then
    ShowMessage(IntToStr(index));

  for i := 0 to list.Count-1 do
    ListBox1.Items.Add(list.Strings[i]);

  list.Free;
end;

で、listの何がなかったことになったのですか?

あとですね、showmessageで、”3”と表示されたのですが、なぜ3なのかわかりません。listbox1に表示されたのは

Delphi
Good
Hello
hoge

でした。

編集 削除
stringlist  2007-01-29 12:28:51  No: 24640  IP: 192.*.*.*

Delphi[0]
Good[1]
Hello[2]
hoge[3]

[]内の数値はIndex

0から割り振られます。

編集 削除
deldel  2007-01-29 13:06:15  No: 24641  IP: 192.*.*.*

list.Free;
のあとには、list はもう存在しないということです。
showmessage(list[0]); などとすると怒られます。

編集 削除
message  2007-01-29 13:25:02  No: 24642  IP: 192.*.*.*

なるほど、そういうことですか。
ありがとうございました!
Freeにするタイミングを間違えないようにしないといけませんね。

編集 削除