0

在以下 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 的分配。我不想让事情变得比我需要的更复杂,但同时我喜欢尽可能地把事情做好。

4

2 回答 2

1

您应该尝试使用 VS 调试器浏览此代码,并查看这些变量的实际值是什么。

于 2010-03-27T07:38:36.613 回答
-1

原来这个问题是由我最初的代码引起的,它没有除零检查,如下所示:

return totalGrades/gradedUnits;

问题是虽然我更新了代码,但实际上我仍然在抛出原始错误的同一个调试会话中,所以程序仍然在旧代码上运行,并且每次我重新启动它时都会再次抛出错误。

该问题已通过重建解决方案得到解决,该解决方案强制进行新的调试会话。只需终止调试会话并通过重建重新启动它也可以解决它(我只是没有注意到我仍在会话中)。

于 2010-03-31T14:10:21.883 回答