程序崩溃 - 除以0

时间:2014-05-06 14:33:54

标签: c++ c visual-studio-2010

我对在不同计算机上运行程序有疑问。

我用C ++ \ windows 7 64位\ visual studio编写了一个程序,它在我的计算机上运行良好。

当我试图在另一台计算机上运行它时(Windows 7 64位\ visual studio)程序崩溃了 - 它说我将0除以某个变量。

这是(很少)代码的一部分:

unsigned int var2;
double var1 ;

void main()
{
 // some code ...
 var1 = 1.0;
 // some more code ...
 var1 /= 2;
 ...  
 var2 /= var1;
}

在最后一行之后程序崩溃......

我知道这两个变量来自不同类型,但我很高兴知道为什么代码在一台机器上运行完美而在另一台机器上崩溃以及如何防止这种情况。

编辑:我收到此警告 -

警告7警告C4244:'/ =':从'double'转换为'u_int',可能会丢失数据

谢谢!

2 个答案:

答案 0 :(得分:3)

  

警告7警告C4244:'/ =':从'double'转换为'u_int',   可能丢失数据

这可能是指程序的最后一行,您尝试将int除以double。此时的double保存值0.5,当转换为int时,该值将向下舍入(或者更确切地说是截断)为0。这导致除以零。

答案 1 :(得分:0)

正如我理解规范中的“通常算术转换”一样,表达式应首先将var1转换为double,使用double值进行算术运算(非零值)然后转换结果为'`nt`。所以警告并没有解释除以0的异常。

我认为错误来自快照中未显示的部分代码,可能包含未定义的行为(通常具有相同的代码,有时可以工作,有时会崩溃)。