VS C ++在特定检查后抛出除以零的异常

时间:2010-03-27 07:36:29

标签: c++ visual-studio-2008 exception integer-division divide-by-zero

在下面的C ++代码中,ain整数除零应该是不可能的:

// 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的作业。我宁愿不让事情变得比我需要的更复杂,但同时我喜欢在可能的情况下做正确的事情。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

事实证明这个问题是由我原来的代码引起的,它没有被零除零检查,如下所示:

return totalGrades/gradedUnits;

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

通过重建解决方案解决了这个问题,这迫使新的调试会话。简单地终止调试会话并通过重建重新启动它也会解决它(我只是没有注意到我还在会话中)。