メモリリーク




GCのあるC#を併用しているのでメモリリークに鈍くなってる。メモリリーク検出ツール使ってたら少し発見したので、修正。CreateしたらFreeするってのは当然として、引っかかったところ。

まず動的配列の確保と解放。

var
a: array of Integer;

begin
SetLength(a, 8); // 8要素確保

...

SetLength(a, 0); // 0をセットすることで解放
end.

あと文字列の解放。

var
a: string;
begin
a := "aaa"; // 文字列作成

...

a := "";      // これで解放される。
end.

null終端文字列ならSysUtils.StrDisposeで解放。

(2005/4/16追記)

上の例だとリークしない。メモリリーク起こる例(文字列)。

program Leak;

{$APPTYPE CONSOLE}

uses
MemCheck,
SysUtils;

const
CHARLIST: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789.-';

var
a: string;
begin
a := CHARLIST[1] + CHARLIST[2];
Writeln(a);
a := ''; // これで解放される。
end.

動的配列のほうはいまだ原因がよくわからない。SetLength(a, 0)で解決はしたんだけれども。

(2004/4/21さらに追記)

結局memcheckのバージョンが古いのが原因だったようで。memcheck 2.73は→(

http://v.mahon.free.fr/pro/freeware/memcheck/)



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です