TKF3といいます。
環境は、WinXP(SP3) VC++6 MFC です。
作成したソフト終了時に、以下のメッセージが表示されます。
----------------------------------------------------------------------
Detected memory leaks!
Dumping objects ->
oleinit.cpp(86) : {84} client block at 0x00D25F98, subtype 0, 64 bytes long.
a CCmdTarget object at $00D25F98, 64 bytes long
Object dump complete.
スレッド 0x360 終了、終了コード -17891602 (0xFEEEFEEE)。
----------------------------------------------------------------------
メモリーリークを起こしているのはわかります。
しかし、色々と調査してはいるのですが、
原因を特定できていません。
どなたか、ご教授おねがいします。
開放していないから…としか、言い様が無い。
oleinit.cpp(86)と表示されているんで、その場所を見てみましょう。
すると、AfxOleInit() 関数の中で
pThread->m_pMessageFilter = new COleMessageFilter;
としているのが分かります。
なんとなく、AfxOleInit() に対応しそうな、AfxOleTerm()がすぐ下にあるので
ざっと眺めると、115行目に
delete pThread->m_pMessageFilter;
とあります。
そんなわけで、AfxOleTerm()の呼び忘れの可能性が高いかと、
原因そのものよりも、調べ方が伝わったなら幸いです。
>ん?さん
すいません、文章の説明不足でした。
エラーメッセージにある「oleinit.cpp」は、自分では記述していません。
調べてみると、
C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
に格納されていました。
自分では心当たりのないエラーだったので、原因がわからない状態です。
>bunさん
返信ありがとうございます。
>なんとなく、AfxOleInit() に対応しそうな、AfxOleTerm()がすぐ下にあるので
>ざっと眺めると、115行目に
> delete pThread->m_pMessageFilter;
>とあります。
>
>そんなわけで、AfxOleTerm()の呼び忘れの可能性が高いかと、
>原因そのものよりも、調べ方が伝わったなら幸いです。
AfxOleTerm()関数の先頭で、ブレークポイントを設置してみました。
すると、終了時に関数自体はコールされていました。
ただし、109行目のif (!bJustRevoke)でbJustRevoke=1のために、
delete pThread->m_pMessageFilter;
の処理に流れないということまでわかりました。
現時点では、AfxOleTerm()について、検索している最中です。
解決しました!
試しに、AfxOleTerm(FALSE);をデストラクタに記述したところ、
エラーメッセージは消え、
スレッド 0x360 終了、終了コード -17891602 (0xFEEEFEEE)。
という記述になりました。
ここで、終了コードが異常値なので、終了時のコードを追った所、
CMainFrame::OnClose()の関数の中に、余計なコードが記述していました。
結果を言うと、自分のミスでした。
レスいただいた方ありがとうございました。
お騒がせしました。