【发布时间】:2010-03-27 07:36:29
【问题描述】:
在以下 C++ 代码中,整数除以零应该是不可能发生的:
// gradedUnits and totalGrades are both of type int
if (gradedUnits == 0) {
return 0;
} else {
return totalGrades/gradedUnits; //call stack points to this line
}
然而 Visual Studio 弹出这个错误:
DSA_asgn1.exe 中 0x001712c0 处的未处理异常:0xC0000094:整数除以零。
堆栈跟踪指向代码中指示的行。
更新:我可能只是在这里做了一些愚蠢的事情。在试图让 VS 关注我的调试断点时,我重新构建了解决方案,异常不再发生。在我看来,我可能是在调试会话的中间停止并恢复它,而我以为我正在开始新的会话。
感谢您的回复。在这里删除我的问题是否合适,因为它已经解决并且不是我认为的那样?
似乎 VS 可能只对任何整数除法执行此操作,而不检查是否可以除以零。即使代码永远不能抛出它,我是否需要捕获这个异常?如果是这样,最好的方法是什么?
这是针对使用 C++ 指定 VS 2005/2008 的作业。我不想让事情变得比我需要的更复杂,但同时我喜欢尽可能正确地做事情。
【问题讨论】:
-
除以零看起来在这里是不可能的。但是我们可以使用更多的上下文。另一个线程可以改变gradedUnits吗?您会发布编译器将其转换为的程序集字节/指令吗?也许优化器正在做一些意想不到的事情?
-
这是一个运行时异常。尝试在调试器中运行它并查看值
-
您似乎对异常的工作方式感到困惑。我打赌你来自 Java 背景?当您除以零时,该异常在运行时抛出,而不是在编译时抛出,只是为了让您知道可能发生的异常。因此,虽然该异常不应该发生,但实际上确实发生了,您需要进行调查。
-
我尝试了这段代码以防万一,但它并没有发生在我身上。这里肯定有比仅从该代码中显而易见的更多内容。
-
关于 [..] 删除我的问题 [..] :您可以发布自己问题的答案,让其他人知道如果他们收到此错误,首先尝试重建
标签: c++ visual-studio-2008 exception integer-division divide-by-zero