0

コード スニペットを貼り付けて、直面している問題を説明します。

void materialPropertiesDlg::OnNext() {
    contiBeam *continousBeamPtr;
    contiBeam contiBeamObj;
    UpdateData(TRUE);
    switch (m_steel_grade) {
        // Do Something
    }   
    continousBeamPtr->setMaterial(m_conc_grade, m_steel_grade);
    OnOK();
}

ご覧のとおり、2 行目でポインター オブジェクトが作成され、次の行でオブジェクトが作成されます。そこで、setMaterials()クラスのメンバー関数を呼び出しますcontiBeam。object を使用して簡単に実行できますが、contiBeamObjを使用して関数を呼び出すとcontiBeamPointer、ウィンドウが次のエラーをスローします。

アプリケーションが動作を停止しました。

私は必要なことをすることができますが、これの考えられる理由は何ですか?

4

1 に答える 1

0

ポインターcontiBeam *continousBeamPtr; を割り当てずに使用しています。

これは未定義の動作であり、アプリケーションがクラッシュします。

new次のように、を使用してポインタを割り当てる (メモリを予約する) 必要があります。

 contiBeam *continousBeamPtr = new contiBeam;

ただし、究極の質問は、そもそもなぜポインターを使用するのかということです。必要ですか?あなたが投稿したコードからはそのようには見えません。

于 2012-09-10T13:00:27.380 に答える