2011-01-07 14 views
0

私は空のプロジェクトを持っています(これにはフォームが含まれています)。この行をプロジェクト 'USES GR32_Image;に追加するとアプリケーションを実行すると、FastMMはプログラムのリークを示します。 FastMMは完全なデバッグに設定されています。私のプログラムには、Delphi IDEが生成するものと 'gr32を使う'以外のコードはありません。FastMMはGraphics32で突然メモリリークを報告します

このレポートは意味がありません。ここ は完全なログです:http://pastebin.com/Yhev3rJ2
そしてここでは、ソースコードである:http://pastebin.com/VjRrRiS8

私は前にGraphics32ユニットを使用していると私は問題を抱えていたことはありません。なぜこのリークがあり、FastMMが適切なレポートを生成できないのか?

+0

私たちが手助けできるようにコードを投稿してください。問題が発生する単一の.dprファイルに何かをまとめることができるはずです。 –

+0

@Altarなぜスタックトレースに関数名をもらっていませんか? FastMMを正しく設定する必要があると思います。また、おそらくこれらのメモリリークはVCLからのものであると私は思いました。 –

+0

@David:FullDebugModeがオンで、FastMMが正しく設定されているように見えますが、アドレスを検索するためのマップファイルはありません。リンカーが詳細な地図ファイルを生成していれば、何が起きているのかがはっきり分かります。 –

答えて

3

完全なデバッグ情報でアプリケーションをコンパイルしてから、リンカオプションで、デバッグ情報が.EXEおよび/または.MAPファイルにあることを確認してください。

次に、FullDebugModeでFastMMを実行し、結果の.TXTファイルをコピーして質問に貼り付けます。

さらに詳しいヒントについては、this postも参照してください。

編集:

良い最初のステップは、あなたの.TXTファイルにこのような何かを行うことです。

あなたのケース 281には、あなたの最初の割り当て番号を与える
find "The allocation number is" < fastmmlog.txt | sort /R 

。それから、

、あなたは割り当て番号について.TXTで検索:

ここ
--------------------------------2011/1/7 23:31:03-------------------------------- 
A memory block has been leaked. The size is: 20 

This block was allocated by thread 0x1540, and the stack trace (return addresses) at the time was: 
402D80 [System][System][@GetMem] 
40388F [System][System][TObject.NewInstance] 
403C12 [System][System][@ClassCreate] 
4038C4 [System][System][TObject.Create] 
403C12 [System][System][@ClassCreate] 
403C6A [System][System][@AfterConstruction] 
457922 [GR32_Bindings][GR32_Bindings][NewRegistry] 
45807E [GR32_LowLevel][GR32_LowLevel][RegisterBindings] 
458152 [GR32_LowLevel][GR32_LowLevel][GR32_LowLevel] 
404373 [System][System][InitUnits] 
4043DB [System][System][@StartExe] 

The block is currently used for an object of class: TList 

The allocation number is: 281 

あなたが見ることができ、NewRegistryがあなたのリークに関与していること。
そこから、デバッグを開始して、なぜ漏れているのかを知ることができます。

--jeroen

+0

こんにちは。私はちょうどそれをしました。元の投稿をご覧ください。投稿は30000文字に制限されているため、ログから大きな部分を削除しなければなりませんでした。 – Ampere

+0

完全な.txtをhttp://pastebin.com/またはhttps://gist.github.com/でオンラインにして、人々のバンがすべてを見るようにします。 –

+0

完全なログとソースコードを貼り付けました。可能であれば元の投稿をご覧ください。 – Ampere

8

フルバージョンのFastMM4を使用している場合は、FullDebugModeを有効にします。また、スタックトレースに役立つ詳細なマップ生成をオンにします。ユニットのユニット初期化セクションをチェックし、問題がないかどうかを確認してください。

0

両方の問題が解決されました。

  1. 私はいくつかの時間前、私はGR32.incにこのコード行を追加したことを思い出し: {$ D-} を、私は、行を削除VCLを再コンパイルし、それが働きました。完全に私のせいです。

  2. 「FastMMが適切なレポートを生成できない理由」という質問に答えるJeroen Pluimersの記事を参照してください。参加するためのすべての


感謝。

+1

あなたはソートされていると聞いていいですが、自分以外の誰かに代理人を渡すことができました! –

+0

あなたはコメントだけを持ち、スタンドアロンの回答はありません。私が知っていることから、問題の解決策としてコメントを投票することはできません。ごめんなさい。 – Ampere

+0

私は知っているが、私は実際に私が代理人を取得する必要はありませんでした。他の人もそれを聞いて、私はあなたが今それをジェローンに渡したことを知っています。また、IMAGE_LARGE_ADDRESS_AWAREの質問で必要なものを手に入れましたか? –