2012-04-13 8 views
1

私のC++プログラムでmemleakを特定しようとしています。新しいなく、malloc関数を使用している間、私は、メモリ割り当てのために、2008年Visual Studio 2008でmemリークが検出されましたが、シンボル '__FILE__'は定義されていません

私はmemleaksを特定して対処するいくつかのチュートリアルを発見したのVisual Studioを使用し、これは私が私のメインの上に定義したものです:

#define __STDC_CONSTANT_MACROS 

#ifdef _DEBUG 
#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) 
#define new DEBUG_NEW 
#endif 

残念ながら私はあなたがここで見ることができ、エラーのトン、取得:http://pastebin.com/9ax90VTg

をしかし、私は問題を発見したと思う:neighter __FILE____LINE__定義されています。私は "RMB->は定義に行く" OR __FILE__または__LINE__の "RMB->宣言に行く" をクリックすると私が取得:

それぞれ
the symbol '__FILE__' is not defined 

the symbol '__LINE__ ' is not defined 

どうすれば解決できますか?

答えて

0

記号__FILE____LINE__は、常にコンパイラによって定義されます。そうでない場合は、それらを禁止するための特別なオプションを使用している必要があります。

一方、投稿したコードは標準ライブラリと一緒に使用することはできませんので、避けてください。 ではないメモリリークを見つけるための良い解決策です。

編集:あなたの投稿を読んで:あなたは定義を表示するためにデバッガを頼りにしているようです。コンパイラによって自動的に生成され、コンパイル時に変更されるため、できません。一方、あなたが見ているエラーは、マクロがキーワードを再定義するという事実と、標準のライブラリコードを壊すような形で非常によく似ています。

+0

次に良い解決策は何ですか?私は正確な線や、少なくとも漏れの原因となる方法を知る必要があります。 – user1331072

+0

@ user1331072最良の解決策は、valgrindのような外部ツールのようなものです。あるいは、グローバルな 'operator new'と' operator delete'(あるいは実際には少なくとも 'malloc'と' free')の代わりに書くことができます。スタックウォークバックを取得するには、プラットフォームに依存するコードが必要ですが、一般的に難しくありません。それを解釈する方がより複雑です:私のバージョンの 'operator new' /' delete'は単に戻りアドレスを16進数で出力し、これらを手作業で利用してプロセスのマップでそれらを探します。 –

0

あなたは間違った木を樹立しています。 __FILE__および__LINE__は、プリプロセッサによって処理されます。彼らは定義されていないはずです。これらのエラーを生成する実際のコードを表示していないため、私たちがどのようにあなたを助けてくれるのかよくわかりません。

関連する問題