リブートの日

担当機能の実装がほぼ終わった*1ので、デバッガ上でトレースしながら細かいところを埋めていく。
一部モジュールがリアルタイムシステム上で動作するのだが、そのせいかどうかブルースクリーンが出まくり。1回デバッグ実行する毎にPCをリブートしないといけない。おかげでデバッグ効率は上がらない。
で、今日出た現象の事。インスタンス化されていないオブジェクトのメソッドを呼び出しても落ちない。インスタンス変数にアクセスすると落ちる。

class AClass
{
private:
    int m_nValue;

public:
    void Method1();
    void Method2();
};

void AClass::Method1()
{
    // メンバアクセスなし
}

void AClass::Method2()
{
    this->m_nValue = 1; // メンバアクセス
}

        :        :        :
    AClass  *pInstance = NULL;  // インスタンス化忘れ
        :        :        :
    pInstance->Method1();    // メンバアクセスがないので落ちない
    pInstance->Method2();    // メンバアクセスで落ちる

デバッガ上で動かした場合だけかな。なんとなく頷ける動作ではあるけれども。thisポインタがNULLなんておかしいと思ったよ。(その時に気づけよ)
C++もまだまだ奥が深いっす。

*1:骨組みだけという話も...