在将double转换为unsigned int期间堆栈损坏

时间:2017-06-08 19:21:15

标签: c++ casting double corruption

在运行visual c ++的windows机器上,我发现以下代码行通过调用__dtoui3(在此调用后更改了一堆字节)来看似损坏的内存。具体来说,似乎打印了DBL_MAX的值连续两次在内存中的随机位置)

double temp =  DBL_MAX;
unsigned int blissfullyUnaware = (unsigned int) temp;

但是,以下情况不会:

double temp =  0;
unsigned int blissfullyUnaware = (unsigned int) temp;

有人能说清楚为什么会这样吗?

1 个答案:

答案 0 :(得分:-1)

  

[conv.fpint] / 1 浮点类型的prvalue可以转换为整数类型的prvalue。转换截断;也就是说,丢弃小数部分。如果截断值不能,则行为未定义   在目的地类型中表示

强调我的。 DBL_MAX大概在2 ^ 1024左右,而unsigned int可能在2 ^ 32时达到最高。