-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()...

4

2 回答 2

0

我们唯一可以在不知道是什么的情况下解决的问题system是更改 和 的类型,因为a b它们只是数组索引,并确保它们在数组范围内。您可能还需要确保这不为零,因为您除以结果:cunsigned 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 回答