10

新しいMFCアプリケーションを作成すると、ウィザードはほぼすべてのCPPファイルに次のコードブロックを作成します。

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

そして時々それはまたこれを追加します:

#undef THIS_FILE
static char THIS_FILE[] = __FILE__;

冗長な場合は、CPPファイルからこのコードを削除したいと思います。VS2008でC++/CLIを使用するMFCアプリを使用しています。

このコードをCPPから削除した後、デバッグで実行しようとしましたが、正常に機能しているようです。「新しい」変数は正常に機能し、リークはなく、ASSERTダイアログに正しいファイル名が表示され、問題のある行にジャンプします。

誰かがそれが何をするのか、そしてそれを削除しても安全かどうか教えてもらえますか?

4

2 に答える 2

10

これを削除しても完全に安全です。これはデバッグ支援です。これをそのままにしておくと、プログラムの終了時に発生したメモリリークの出力ウィンドウの警告でより詳細な情報が生成されます。それを削除しても、メモリリークレポートが表示されますが、ソースコードのどこで発生したかについての詳細はありません。

于 2009-02-06T17:13:17.197 に答える
1

Microsoft Visual C++ 2010 では、コード全体を削除してヘッダーに #define NEW DEBUG_NEW を 1 つだけ配置できますが、適切なメモリ リーク レポートが得られます。

Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7508} normal block at 0x029B9598, 54 bytes long.
 Data: <                > E4 B8 C9 00 12 00 00 00 12 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7501} normal block at 0x029B94A8, 28 bytes long.
 Data: <                > E4 B8 C9 00 05 00 00 00 05 00 00 00 01 00 00 00 
f:\source\agent\agent\deviceid.cpp(21) : {7500} normal block at 0x029CDFC0, 8 bytes long.
 Data: <        > A8 95 9B 02 B8 94 9B 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {6786} normal block at 0x029C0D88, 160 bytes long.
 Data: <        G       > E4 B8 C9 00 19 00 00 00 47 00 00 00 01 00 00 00 
f:\source\agent\sysinfo\sysinfo.cpp(27) : {6733} normal block at 0x029B84D8, 92 bytes long.
 Data: <                > 00 00 00 00 00 10 00 00 00 00 01 00 FF FF FE 7F 
Object dump complete.
于 2012-01-18T14:28:30.397 に答える