程序崩溃 - 除以0

问题描述 投票:-3回答:2

我有关于在不同的计算机上运行程序的问题。

我用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',可能会丢失数据

谢谢!

c++ c visual-studio-2010
2个回答
3
投票

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.