« C標準ライブラリを用いて、"02/07/18 14:16"といった任意のフォーマットの時間文字列を得るには? | トップページ | メモリリークに関する考察。 »

2003年11月24日 (月)

_CrtSetDbgFlag

_CrtSetDbgFlagや_CrtCheckMemoryで_CRTDBG_CHECK_CRT_DFを使うと大量にメモリリークのログが出るけど、どうも自分のプログラムと関係がないっぽい。

ためしに、


#include <windows.h>
#include <crtdbg.h>

////////////////////////////////////////////////////////////////////////////////

int __stdcall	WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
	_CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF | _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_CHECK_CRT_DF );
	return 0L;
}

////////////////////////////////////////////////////////////////////////////////
上記のコードでやってみたんですが、結果は


Detected memory leaks!
Dumping objects ->
_file.c(137) : {42} crt block at 0x003707B0, subtype 0, 2048 bytes long.
 Data: < ~B	 B 0 B P B > F0 7E 42 00 10 7F 42 00 30 7F 42 00 50 7F 42 00
onexit.c(198) : {41} crt block at 0x00372EC8, subtype 0, 128 bytes long.
 Data: <  A		   > C3 10 41 00 CD CD CD CD CD CD CD CD CD CD CD CD
stdenvp.c(130) : {40} crt block at 0x00372BF8, subtype 0, 654 bytes long.
 Data: <_ACP_PATH=C:\Pro> 5F 41 43 50 5F 50 41 54 48 3D 43 3A 5C 50 72 6F
	:
stdenvp.c(117) : {4} crt block at 0x003716F0, subtype 0, 148 bytes long.
 Data: <  7 0 7	 7 ( 7 > C0 17 37 00 30 18 37 00 B8 18 37 00 28 19 37 00
stdargv.c(130) : {3} crt block at 0x00371648, subtype 0, 102 bytes long.
 Data: <P 7	   c:\docum> 50 16 37 00 00 00 00 00 63 3A 5C 64 6F 63 75 6D
ioinit.c(130) : {1} crt block at 0x00370670, subtype 0, 256 bytes long.
 Data: <		   > FF FF FF FF C1 0A CD CD FF FF FF FF C1 0A CD CD
Object dump complete.
はぁ?って感じですが。

どうもCラインタイムライブラリの段階でがっつりメモリリークしてるのかなぁ。
crtdbg.hってどーもしょぼしょぼみたいだし、_CrtSetDbgFlag周りのコードがバグってるのかも。
…まぁランタイムもデバッグツールもちゃんと動いててただの俺の勘違いの可能性がないわけじゃないですが…。

たぶんユーザーコードの問題じゃないと思います。
_CrtSetDbgFlagつかうなら_CRTDBG_CHECK_CRT_DFをはずして使うといいかも。

|

« C標準ライブラリを用いて、"02/07/18 14:16"といった任意のフォーマットの時間文字列を得るには? | トップページ | メモリリークに関する考察。 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« C標準ライブラリを用いて、"02/07/18 14:16"といった任意のフォーマットの時間文字列を得るには? | トップページ | メモリリークに関する考察。 »