代码之家  ›  专栏  ›  技术社区  ›  David Mason

VS C++在特定检查后投掷除以零异常

  •  0
  • David Mason  · 技术社区  · 16 年前

    在下面的C++代码中,AN整数除以零是不可能发生的:

    // 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中0x00112c0处未处理的异常:0xc0000094:整数被零除。

    堆栈跟踪指向代码中指示的行。

    更新:我可能只是在这里做了些傻事。在尝试让VS注意我的调试断点时,我重新构建了解决方案,异常不再发生。在我看来,当我认为我正在开始新的会话时,我可能正在调试会话的中间停止并恢复它。

    感谢您的回复。既然我的问题已经解决了,而不是我想象中的问题,在这里删除它是否合适?

    看起来vs可能只对任何整数除法进行除法,而不检查除法是否可能为零。即使代码永远不应该抛出这个异常,我是否需要捕获它?如果是这样,最好的方法是什么?

    这是一个用C++指定VS 2005/2008的赋值。我不想让事情变得比我需要的更复杂,但同时我喜欢在可能的情况下做正确的事情。

    2 回复  |  直到 13 年前
        1
  •  0
  •   Sad Developer    16 年前

    您应该尝试使用vs调试程序浏览这段代码,看看这些变量的实际值是什么。

        2
  •  -1
  •   David Mason    16 年前

    结果发现这个问题是由我原来拥有的代码引起的,它没有被零除检查,如下所示:

    return totalGrades/gradedUnits;
    

    问题是,尽管我已经更新了代码,但实际上我仍然处于引发原始错误的同一个调试会话中,因此程序仍在旧代码上运行,每次重新启动时都会再次引发错误。

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