【发布时间】:2012-05-17 21:46:08
【问题描述】:
我有一段简单的代码,它从 FORTRAN 生成的 REAL 数组中提取浮点数,然后将其插入到流中以进行日志记录。虽然这适用于前 30 个案例,但在 31 日它会因“浮点无效操作”而崩溃。
代码是:
int FunctionDeclaration(float* mrSwap)
{
...
float swap_float;
stringstream message_stream;
...
swap_float = *(mrSwap+30-1);
...
message_stream.clear();
message_stream << 30 << "\t" << swap_float << "\tblah blah blah \t";
在调试时,实例崩溃前的 swap_float 的值(在上面的最后一行)是 1711696.3 - 除了这比到目前为止的大多数值大得多之外,它并没有什么特别的地方。
我也试过用 cerr 替换 message_stream,也遇到了同样的问题。迄今为止,我一直认为 cerr 几乎是坚不可摧的 - 一个简单的浮子怎么能摧毁它?
编辑:
感谢 cmets:我添加了 mrSwap 的声明。 mrSwap 大约有 200 长,所以我离结束还有很长的路要走。它在我的控制之外填充,并且单个条目可能不会被填充 - 但据我所知,这只是意味着 swap_float 将被设置为随机浮点数?
【问题讨论】:
-
你能把它做成一个可编译的小例子吗?
mrSwap是什么?它是如何填充的? -
听起来你已经超越了终点。
-
如果这是一个指针操作,我想知道你是否刚刚跑过了数组的末尾。 cerr 没有问题,我敢肯定。
-
你指的是
mrSwap,但不要显示它是什么。 -
你试过用
printf()代替cout吗?
标签: c++ floating-point-exceptions