「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@259) [低] [解決]
@259■ (#739) ハッシュでメモリリークの疑い - しらたま (2009-05-15 23:34) /低 調査中
【症状】ハッシュでメモリリークの疑い
【再現方法】
ハッシュのアイテム設定をするSetItemメソッドで、既にキーが存在していたときは、元のものを置き換えるが、
置き換えられた元のものをSetItemメソッド内でFreeしていない。
また、ハッシュアイテムクラスでPHiValueを保持しているが、それをデストラクタで解放していない。
これらの動作がこれで正しいのかどうか確かめる。
【要望】
解放出来ているか確認。出来ていなければ解放するようにする。
【バージョン】1.520

(#777) RE:ハッシュでメモリリークの疑い - クジラ飛行机 (2009-05-21 00:11) /低 確認待ち
PHiValueのハッシュですが、hima_variable_ex.pas で定義されています。
THiHash.SetValue を見ると、キーの再設定の処理が書かれています。

procedure THiHash.SetValue(key: AnsiString; const Value: PHiValue);
var
  i: THiHashItem;
begin
  i := Items[key] as THiHashItem;

  if i = nil then
  begin
    i := THiHashItem.Create;
    i.value := Value;
    i.Key := key;
    Items[key] := i;
  end else
  begin
    hi_var_free(i.value);
    i.value := Value;
  end;

  i.value.Registered := 1;
end;

見たところ、SetItem は、THiHash のスーパークラスで、こちらでは、ハッシュが保持する値までは管理しないようにしています。

(#781) RE:RE:ハッシュでメモリリークの疑い - しらたま (2009-05-21 13:14) /低 解決
どうやら私の早とちりだったみたいですね。
失礼しました。

(#739)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能