- ベストアンサー
VS2010でDetected memory leaks!が発生しています。対処方法を教えてください。
- VS2010を使用している際に、Detected memory leaks!が多発しています。
- いくつかは修正できましたが、特定の場所の意味が分からず困っています。
- 他の回答によると、_CrtDumpMemoryLeaksの実行場所を後にすることで対策できるそうですが、プロジェクトには明示的に記述されていません。アドバイスをお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 起動時に何のダイアログも表示されない
こんにちは。 大変恐縮ですがこちらで質問させてください。 開発環境はVC2005のMFCです。 質問内容は題名の通りなのですが、デバッグを実行しても何のダイアログが表示されない という状態になってしまいました。 すぐにデバッグが終了してしまいます。(「デバッグなしで開始」でも同様です。) プロジェクトはダイアログベース、スタティックライブラリ、ソケットを使える設定で 作成しました。 プロジェクトを作成してから他ダイアログを作り全てのダイアログに新しくボタンを配置したのと、初期配置のOK,キャンセルボタンを削除した以外は、コード上に手を加えるなどはしていません。 また、以下のようなエラーコードが出力されました。 Dumping objects -> f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {75} normal block at 0x003496B8, 488 bytes long. Data: < > E8 03 00 00 00 00 00 00 E9 03 00 00 00 00 00 00 {74} normal block at 0x00349580, 248 bytes long. Data: < > FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 Object dump complete. プログラム '[1528] test.exe: ネイティブ' はコード 0 (0x0) で終了しました。 何か原因と対策等がわかりましたら回答をいただければと思います。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- メモリリークについて
VC6.0でデバッグ実行すると Detected memory leaks! Dumping objects -> ソースファイル名(932) : {136739} normal block at 0x00FD4AC0, 0 bytes long. Data: <> メッセージがあり メモリがリークしているようです メッセージやソースから察するに 0バイトの領域を確保し それを解放したときに起こっているようです 領域をmallocして 解放ではNULLでなければ解放 という処理はしてはいけないことなのでしょうか 0バイトの領域を確保した場合 又は0バイトの領域を確保しないように 処理しないといけないのでしょうか? 知識のある方よろしくお願い致します
- ベストアンサー
- C・C++・C#
- VC++ オリジナルDLLを使用するとアプリを終了させる時にメモリリークする
VisualStudio2005 C++ユーザです。 メモリリークの解決の糸口を探しています。 オリジナルDLLでクラスを作成しそれをオリジナルアプリ側で宣言だけして実行、アプリを閉じると「Detected memory leaks!」と表示されます。 アプリもDLLもデフォルト状態での使用のため、何が原因かさっぱりです。 解決の手引きお願い致します。 ●作成DLL ・DLLの種類>MFC拡張DLL ・クラスはエクスポートするように記述変更 >class AFX_EXT_CLASS CHogehoge : public CObject ・メンバ関数 InitHogehoge() として「int i=0;」のみ記述 ●作成アプリ(MDI形式) ・プロジェクト形式 MFC標準 ・共有DLLでMFCを使用に設定 ・以下のようにクラスの宣言 >例 void CTestApp::OnAppAbout()内にCHogehoge abc;を宣言 ●現象 ・アプリを終了させた時に以下が出力される Detected memory leaks! Dumping objects -> d:\実験\f_tool\f_tool.cpp(53) : {65} client block at 0x003B9028, subtype c0, 64 bytes long. a CDynLinkLibrary object at $003B9028, 64 bytes long a CDynLinkLibrary object at $003B9028, 64 bytes long {59} client block at 0x003B3298, subtype c0, 64 bytes long. a CDynLinkLibrary object at $003B3298, 64 bytes long a CDynLinkLibrary object at $003B3298, 64 bytes long Object dump complete. F_TOOL.DLL Terminating! プログラム '[192] Test.exe: ネイティブ' はコード 0 (0x0) で終了しました。 ●特記事項 エクスポートしたクラス自体は参照出来ているので基本的なミスはないつもり。 出力の「d:\実験\f_tool\f_tool.cpp(53) : {65} client block at ・・・.」はDLL側の「new CDynLinkLibrary(F_TOOLDLL);」行。 宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- _dupenv_s関数でメモリリーク
VC++2005のMFCにてアプリを作成しています。 環境変数「TEST_ENV」の値を「OFF」にあらかじめ設定し、 _dupenv_s()関数にて変数の値を読込むプログラムなのですが、 プログラムをデバッグモードで実行し出力欄を見ると、 「Detected memory leaks!」と表示され、 原因箇所を探ると、どうやら ============================================== char* pGetEnv; size_t len; _dupenv_s( &pGetEnv, &len, "TEST_ENV" );←ここ ============================================== にて発生しているようです。 MSDNによると、lenにはバッファ容量を指定とあるので、 原因として、lenに何も指定されておらず、リークが発生していると考え、 Webで方法を色々調べたのですが、どのサイトも同じような書き方で、 解決法が分かりません。 どなたかご存知の方おられましたら、ご教授お願い致します。 なお下記にメッセージログを記載します。 Detected memory leaks! Dumping objects -> {73} normal block at 0x003A7018, 4 bytes long. Data: <OFF > 4F 46 46 00
- ベストアンサー
- C・C++・C#
- メモリリークの件
メモリリークについて教えてください。 最近VC++を勉強中なのですが、メモリリークというものを知り、_CrtDumpMemoryLeaks()をしたところ、以下のコメントが出力されました。 [コメント] Detected memory leaks! Dumping objects -> strcore.cpp(118) : {71} normal block at 0x00344978, 20 bytes long. Data: < cmd.> 01 00 00 00 07 00 00 00 07 00 00 00 63 6D 64 2E {48} client block at 0x003428E8, subtype 0, 64 bytes long. a CDynLinkLibrary object at $003428E8, 64 bytes long {43} client block at 0x00342720, subtype 0, 64 bytes long. a CDynLinkLibrary object at $00342720, 64 bytes long {41} client block at 0x003425D0, subtype 0, 64 bytes long. a CDynLinkLibrary object at $003425D0, 64 bytes long Object dump complete. スレッド 0x584 終了、終了コード 0 (0x0)。 上記のコメントから、メモリリークを起こしていることはわかりました。ただ、strcore.cppというクラスは作成していないのですが、エラーが出ます。 多分他の関数から呼ばれているクラスだと思うため、クラス等をコメントアウトして調べたのですが、エラーがまだ出力されます。 (Data: < cmd.> 01 00 00 00 07 00 00 00 07 00 00 00 63 6D 64 2Eここは自作クラス上の問題だと思います。) newとかの解放はしているのですが、他にメモリリークをする原因ってあるのでしょうか?
- ベストアンサー
- C・C++・C#
- Visual Studio2008でのメモリリーク
プログラムを組んでいて、終了すると 以下のようなメモリリークがでました。 desktop\emptyproject ?d?a?E?μ\dxut\core\dxut.cpp(3385): DXUTCleanup3DEnvironment hr=DXUTERR_NONZEROREFCOUNT (0x80040904) D3DX: MEMORY LEAKS DETECTED: 363 allocations unfreed (322368 bytes) D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1a35 to debug MSDNでは DXUTERR_NONZEROREFCOUNT Direct3D デバイスがゼロ以外のリファレンス カウントを持っているため、一部のオブジェクトが解放されませんでした。 とありますが、この意味もよく分かりません。 今までのメモリリークは Dumping objects -> {343} normal block at 0x0207F288, 2240 bytes long. のように割り当てられたブロックが分かりましたが、 上の様なメモリリークは初めてで、 文からメモリリークの原因を検出することができないでいます。 何故、下ではなく上の様なエラー文になるんでしょうか?
- ベストアンサー
- C・C++・C#
- メモリリーク?どう回避すれば。。。
Visual Studio 2005 SP1(Vista 64bit)で開発しているのですが、実行時に固まってしまうので、デバッグをかけたところ終了時に f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp と出てメモリリークだと表示されました。 64ビットアプリの開発中でわからないことだらけです。 上記のメモリリークはどのように回避すればよいのでしょうか?
- 締切済み
- その他(プログラミング・開発)
- DLしたコードの使い方は?
よろしくお願いします。 親切にソースコードをDLさせてくれるサイトがあります。 DLしたファイルの中にプロジェクトファイル(○○○.dsw)があればそれをダブルクリックすれば良いのですが、無い場合でa.cpp、b.cpp、a.h、b.h・・・とソースコードのみの場合はどのようにしてビルド実行すればよいのですか? ご存知の方、よろしくお願いします。
- 締切済み
- C・C++・C#
- 学校PCで問題なくデバッグできるのに自宅PCのくVisual Studioでは同じソースがデバッグできません。
学校PCで作成しているC++ MFCアプリを自宅PCでも修正できるよう同じくVisual Studioを買ったのですが、同じソリューション、同じソースなのに家PCでだけデバッグ時にエラーが出ます。 学校環境:デスクトップ Windows XP Pro SP2 Visual Stuidio 2005 Academic Edition 家環境:ノート Windows XP Pro SP2 Visual Stuidio 2005 Academic Edition (同じ) プロジェクトのディレクトリごとコピーし、ソリューションファイルを開いてデバッグすると以下のダイアログが出ます。 Debug Assertion Faild! Program: c:\プログラム名\debug\プログラム名.exe File:f:\rtm\vctools\vc7libs\ship\atlmfc\src\occcont\cpp Line:950 For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) 中止 再試行 無視 環境は同じはずですが…。家PCにFドライブはありません。学校PCには仮想ドライブとしてFはありますが何もマウントしていません。家PCのVC++で簡単なMFCアプリを作ると無事デバッグ出来ます。このままではVS買った意味がありません…。 「ソリューションのリビルド」「(プログラム名)のリビルド」してから「デバッグ」してもダイアログが発生します。両リビルド自体にはエラーはでません。デバッグ時のみ出ます。
- ベストアンサー
- C・C++・C#
- C++ visualstudio グローバル変数
C++のプログラミングに関する質問です。 visual studio2008を使用しています。 手元に非常に複雑なC++ファイルなどから構成されている1つのprojectがあります。(ヘッダファイルなどもあります) そのため、このprojectをデバッグすると、A.cppファイルをデバッグ→B.cppファイルをデバッグ→A.cppファイルをデバッグ→C.cppファイルをデバッグのように、色々なcppファイルを跨ってデバッグします。 1つのcppファイルには大量の関数があり、cppファイルの先頭や,関数外の部分に例えばA.cppで int test などと宣言すれば、A.cppファイル内ではtestと名付けた変数をすべての関数で使えます。 しかし、あくまでA.cppファイル内だけで使用できるだけで、別のBやC.cpp内で使うことはできません。 このtest変数をB.cppやC.cppファイルでも使えるようにするにはどうすればいいでしょうか? 上で挙げた例でいうなら、A.cppからB.cppファイルに移動する際の関数の引数として渡す方法は考えられますが、実際には、 test変数を使いたいのはかなり後に登場するcppファイルで関数の引数として扱うのは非常に大変です。 (Z.cppでtest変数を使いたい。しかしZ.cppに到達するまでにはA~Y.cppを通り、その間に登場するすべての関数でtestを引数にしなければならない) 関数の引数でtest変数を使えるようにする以外の方法がありましたたら教えていただけると幸いです。 実際にやりたいことは A.cpp内にある関数が実行されたらその数をカウントし(A.cppのこの関数は何度も呼び出される関数) //count ++ このcount++の値によってZファイルのある関数での動作を変えたいと思っています。 if(count<100){ printf("aaa"); } しかし、現状ではZ.cppファイル内ではcountが定義されていないので上のようなif文を書くとエラーになってしまいます。
- ベストアンサー
- C・C++・C#
お礼
お礼が遅れ、申し訳ありません。 丁寧な回答ありがとうございます。 アドバイスいただいた内容をもとに、リーク箇所を探してみたいと思います。