ある時からアサート発生

[戻る]
kai 2003/02/24(月) 11:06:55
お世話になっています。
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

επιστημη 2003/02/24(月) 11:13:29
> Viewのコンストラクタに
> m_Brush.CreateSolidBrush(RGB(255, 240, 240)); // m_BrushはCBrush型のメンバ
> と記述してあり、ここでとまっているようです。

これをコメントアウトすればその現象は消えますか?
ならば、コンストラクタでそれをやったのがマチガイなのでしょう。
OnCreate/OnInitialUpdateあたりに移してみてはいかがでしょう。

kai 2003/02/24(月) 11:20:30
επιστημηさん レスありがとうございます。

>これをコメントアウトすればその現象は消えますか?

コメントにしてもエラーが出ます。
なにか壊れてしまったのでしょうか?

ASSERT_VALID fails with illegal vtable pointer.
のメッセージが出ています。
困りました。(T_T;

επιστημη 2003/02/24(月) 11:22:40
メッセージによれば仮想関数テーブルの異常により
ASSERT_VALIDに引っ掛かったと。

メッセージマップに悪さしてませんか?
動いていた時点まで遡ることはできないのですか?

kai 2003/02/24(月) 11:35:08
[[解決]]
επιστημηさん 超高速レスありがとうございます。
30秒ごとにのぞいてますか?(笑)

>メッセージマップに悪さしてませんか?
>動いていた時点まで遡ることはできないのですか?

そのクラスのメッセージマップは特に問題なさそうです。
多分何かが壊れてしまったのだと思っています。
仕方がないから、少し前のプロジェクトでやりなおそうかと
思っています。

一応解決としますが、アドバイスがありましたら
引き続きお待ちしています。

古いスレッドには追加発言できません。