MemCheckが正しく動作しないケース


かとちん  URL  2004-12-15 07:49:33  No: 12314

知っていましたでしょうか。

program Project1;

uses
  MemCheck, Windows;

var
  S: string;
begin
  S := 'ほげほげ';
end.

‥‥だとメモリリークします。ほげほげという文字列が。

program Project1;

uses
  MemCheck, Windows;

procedure hoge;
var
  S: string;
begin
  S := 'ほげほげ';
end;

begin
  hoge;
end.

‥‥だとメモリリークしません。まプログラムコード部には
あんまりいろいろ書かないようにしなさいってことですかね?

ユニットファイル内のグローバルのvarは、リークしないです。
あくまでもプログラムファイル内のグローバルのvarだけです。

ちなみに最初のリークしちゃうケースでも、空文字列を最終的に
セットしていればリークしないです。

けっこう気づかず、はまってしまったので皆さんもお気をつけください。


田ーんぼラすかる  2004-12-15 09:05:32  No: 12315

https://www.petitmonte.com/bbs/answers?question_id=800


kkk  2004-12-15 22:52:56  No: 12316

これはメモリリークとは違いますね。
MemCheckの後処理ルーチンの呼ばれるタイミングが違うためだと思います。
下のプログラムだとhogeから帰ってきたときには S:string はすでに開放されています。
上のプログラムの場合MemCheckの後処理ルーチンが呼ばれた段階ではまだ S は開放されていないということだと思います。
S の開放処理はこの後正常に行われていると思いますので問題ないと思います。


にしの  2004-12-16 00:04:21  No: 12317

たとえば
procedure hoge;
begin
  S := '...';
end;

begin
  S := '...';
end;

というように、hogeを呼ばなくてもリークしなくなりますね。
kkkさんのいうようにタイミングかと思います。
追ってみると、MemCheckユニットが解放された後もFreeMemしていますし。
# 文字列Sかどうかまでは追っていません
少なくとも、DelphiのMemoryManagerは自分で確保したメモリを解放していました。少しくらい残っていても問題ないと思います。
APIで取得したメモリは確実に解放しないとOSによってはメモリ不足になりそうですけどね。


いやだから  2004-12-16 00:05:39  No: 12318

> MemCheckが正しく動作しないケース

実際にリークしてないのはいいんだけど、「リークしてる」と報告されるよ、ってことでしょ


Mr.XRAY  URL  2004-12-16 03:09:46  No: 12319

ちょっと面白そうというのはおかしいのですが.やってみました.

MemCheck Ver2.00
Delphi6,7では
1回メモリを解放し忘れています.が表示されます.

MemCheck Ver2.70
Delphi6,7共に表示は現れませんでした.

ところで,かとちんさん,こんにちは.
かとちんさんが,ここに現れるとは思いもよりませんでした.


Mr.XRAY  URL  2004-12-16 03:18:03  No: 12320

OSはWindowsXP(SP2)です.

# SP2を導入してから,ファイルアクセスが何か遅くなった気がする...


マッコ  2004-12-16 07:03:51  No: 12321

Mr.XRAYさんMemCheck Ver2.70て何処にあるんですか、MemCheck Ver2.00は
http://linux.yks.ne.jp/~hori/program.htmlであるみたいですけど


Mr.XRAY  URL  2004-12-16 07:41:28  No: 12322

>Mr.XRAYさんMemCheck Ver2.70て何処にあるんですか

直接お教えしてもいいのですが,是非ネットで(Google)で検索して
みて下さい.

MemCheck Delphi で検索すると,2番目にあります.
DelphiのAND条件を入れないと,VB関係のもリストされてしまいます.


Mr.XRAY  URL  2004-12-16 08:18:50  No: 12323

今メールをよこした方,折角ここでレスしているので,ここで質問して
下さいね.
私のリンクのページのGoogle検索は[日本語ページを検索]になって
いますので,一度表示してから[ウェブ全体から検索]にチェックして
再度検索して下さいね.


マッコ  2004-12-16 17:13:40  No: 12324

Mr.XRAYさんありがとうございました、http://v.mahon.free.fr/pro/freeware/memcheck/
ここのところですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加