Last Updated 2005/08/05
Visual C++ MFC 他のコントロール
リリースビルドで落ちる(引数不正)
2005/08/05

デバッグでは落ちなくて,リリースで落ちる場合がある.
多くが変数の初期化忘れだったり ASSERT と VERIFY の間違いだったり.

しかし以下の場合もある.

「オーバーライドしたメッセージ関数に不要な引数を渡すとリリースビルドで落ちる」


簡単な例として,EN_CHANGE のメッセージ処理を行う時に


ON_CONTROL_REFLECT(EN_CHANGE, OnChange)

void CSampleEdit::OnChange()
{
}

と通常記述するが,メッセージだからと変に解釈して


ON_CONTROL_REFLECT(EN_CHANGE, OnChange)

void CSampleEdit::OnChange(WPARAM wParam, LPARAM lParam)
{
}

と記述すると,デバッグビルドだと問題なく動くのにリリースビルドだと強制終了してしまう.


ON_CONTROL_RANGE のハンドラでも,引き数を void にしているところがある場合リリースでは動作しない.
引数を UINT にしたらリリースでも問題なく動作する.


参照
デバッグとリリースのコンパイルの違い
前後のTips
リリースビルドで落ちる(引数不正)

DSS ProgrammingTipsCGI Ver1.02