MFC を利用しないコードを VC 6 でテストしていて,
コンソール AP として作成したスケルトンに,::oGetFileSize を追加.
MFC を利用した,::GetFileSize と動作を比べるために,
プロジェクトの設定を変更(共有 DLL で MFC を使用).
main 関数が存在するソースに Afx.h などの include を追加.
ビルドして実行すると,メモリリークが発生するようになった.
main 関数内を全てコメントにしてもあまり変わらない.
MFC サポートありで,コンソール AP を作成.
同様に oGetFileSize と GetFileSize を追加.
ビルド,実行すると特に問題ない.
StdAfx.h 内の Afx.h などを tmain のソース内に移動.
リビルドすると,メモリリーク発生.
どうも,Afx.h より前の iostream などが関係している.
また,リビルドしないと現象が変わらない.
StdAfx.h に iostream の include を追加
#define VC_EXTRALEAN
#include <iostream>
#include <afx.h>
Detected memory leaks! Dumping objects -> {51} normal block at 0x00032440, 33 bytes long. Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD {50} normal block at 0x00034F68, 40 bytes long. Data: < |L > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00 Object dump complete. スレッド 0x1218 終了、終了コード 0 (0x0)。 プログラム 'C:\...\T_Con2\Debug\T_Con2.exe' はコード 0 (0x0) で終了しました。
iostream のインクルードを afx.h より後にすることで対応.
[…] Afx.h より前に iostream があるとリークが発生. 同じことをこの時にも書いてた. […]