【发布时间】:2013-03-19 19:48:53
【问题描述】:
我有一堆代码大致相当于这个:
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()... 摆脱 if 语句时,我的问题似乎已解决(即没有崩溃)...
【问题讨论】:
-
您可能不得不责怪“某事...”部分。什么是
system,如何初始化? -
尝试在进行 printf 样式调试时将 cout 更改为 cerr(cerr 已刷新)。否则,请使用调试器来了解您的代码崩溃的确切位置。
-
对于初学者,我会将 cos_th 和 e 放在 debug_3 的 cout 中。如果它们是 NaN 或 inf 之类的东西,则不确定 abs 和 cos 应该如何表现!
-
“我从未遇到过价值回报崩溃”——而且我没有看到任何证据表明这种情况正在发生。就我所见,最合乎逻辑的解释是
aligned返回false,你继续第二个//something部分并且那里的东西崩溃了。 -
正如 Zdeslav 所暗示的那样,如果对齐返回
falsecout << "debug_4" << endl;永远不会达到,因此您的程序在您没有看到debug4的情况下崩溃,即使崩溃可能发生在某些事情上。在if之后放置另一个调试输出。或者尝试使用调试器并单步执行程序