-2

私はこれとほぼ同等のコードをたくさん持っています:

bool test(double e, short a, short b, short c) {
    // Things being calculated here...
    cout << "debug_3" << endl;
    return (1 - abs(cos_th)) < (1 - cos(e));

}

int main() {

// something...

 cout << "debug_0" << endl;
        if(test(e,1,2,0)) {
            cout << "debug_4" << endl;
            // Bunch of useful operations...
        }

// something...

}

コードを実行すると、次の出力が生成されます。

debug_3

その後、プログラムがクラッシュします(Windowsで「プログラムが動作を停止しました...」と表示されます)。値の戻り時にクラッシュが発生したことはなく、原因や修正方法がわかりません。この問題について何か考えはありますか?

編集:いくつかの詳細:

私のビルドでは、cos_thとの値eが有効であることも確認します。

test()人々は問題の原因として2番目の何かを指摘しているようですが、 ...を呼び出してifステートメントを削除すると、私の問題は解決したように見えます(つまり、クラッシュは発生しません) 。

4

2 に答える 2

0

何が何であるかを知らずに修正できる唯一のことは、とsystemの型を変更することです。これらは単なる配列インデックスであるためです。また、それらが配列の範囲内にあることを確認してください。結果で除算するため、これがゼロでないことを確認する必要がある場合もあります。a bcunsigned short

sqrt((Xca*Xca+Yca*Yca+Zca*Zca)*(Xba*Xba+Yba*Yba+Zba*Zba))

cerrの代わりに使用coutして、出力がフラッシュされていることを確認しますが、まだ表示されませんdebug 4

より多くの出力をelse条件内または : の後に入れますif多分関数はfalseを返しますか?

エラーを正確に特定できない場合は、デバッガーを使用してください。

于 2013-03-19T20:07:16.177 に答える
0

通常、リターン時のクラッシュは、関数がスタック (したがってリターン アドレス) を上書きし、プログラムがどこにもジャンプしないことを意味します。これは、逆アセンブリ レベルで命令ごとにステップ実行することで確認できます。

于 2013-03-19T20:22:37.697 に答える