お世話になっています。
Win2000, VC6.0, MFC, SDI(CFormView)で開発中です。
あるときからDebug Assertion Failedのダイアログが出るように
なってしまいました。
コールスタックを見ると
CBrush::CreateSolidBrush
CGDIObject::Attach
CHandleMap::SetPermanent
CMapPtrToPtr::operator[]
AfxAssertValidObject
となっています。
アウトプットウィンドウには
ASSERT_VALID fails with illegal vtable pointer.
HEAP[megro.exe]: Heap block at 00346260 modified at 00349C68 past requested
size of 3a00
と表示されています。
Viewのコンストラクタに
m_Brush.CreateSolidBrush(RGB(255, 240, 240)); // m_BrushはCBrush型のメンバ
と記述してあり、ここでとまっているようです。
今までは何の問題もありませんでした。
わけのわからないエラーで困っています。
ご助言をお願いいたします。 m(__)m
> Viewのコンストラクタに
> m_Brush.CreateSolidBrush(RGB(255, 240, 240)); // m_BrushはCBrush型のメンバ
> と記述してあり、ここでとまっているようです。
これをコメントアウトすればその現象は消えますか?
ならば、コンストラクタでそれをやったのがマチガイなのでしょう。
OnCreate/OnInitialUpdateあたりに移してみてはいかがでしょう。
επιστημηさん レスありがとうございます。
>これをコメントアウトすればその現象は消えますか?
コメントにしてもエラーが出ます。
なにか壊れてしまったのでしょうか?
ASSERT_VALID fails with illegal vtable pointer.
のメッセージが出ています。
困りました。(T_T;
メッセージによれば仮想関数テーブルの異常により
ASSERT_VALIDに引っ掛かったと。
メッセージマップに悪さしてませんか?
動いていた時点まで遡ることはできないのですか?
επιστημηさん 超高速レスありがとうございます。
30秒ごとにのぞいてますか?(笑)
>メッセージマップに悪さしてませんか?
>動いていた時点まで遡ることはできないのですか?
そのクラスのメッセージマップは特に問題なさそうです。
多分何かが壊れてしまったのだと思っています。
仕方がないから、少し前のプロジェクトでやりなおそうかと
思っています。
一応解決としますが、アドバイスがありましたら
引き続きお待ちしています。