1

我有一些软件,我在使用 icc 的 redhat 系统上工作,它运行良好。当我将代码移植到使用 MIPS 运行的 IRIX 系统时,我会得到一些计算结果,这些计算结果肯定应该是“nan”。

我在非 redhat 系统上没有任何好的调试器,但我发现我的一些数组偶尔会出现“nan”,这导致我的点积计算返回为“nan”。

看到我无法使用调试器跟踪它,我认为问题可能出在 memcpy 上。带有动态分配数组的 MIPS 编译器 memcpy() 函数是否存在任何问题?我基本上在使用

 memcpy(to, from, n*sizeof(double));

我无法真正证明这一点,但我认为这可能是问题所在。有一些解决方法吗?也许中小企业数据未对齐?我该如何解决?

4

3 回答 3

1

如果您的问题来自memcpy. 这可能是一个对齐问题:您double的 s 是否充分对齐?(如果您只将它们存储在doubledouble[]对象中或通过double*指针存储它们,但如果您通过指针移动它们可能不会void*)。X86 平台比大多数平台更能容忍错位。

您是否尝试在高警告级别使用 gcc 编译代码?(除了微控制器或大型机之外,Gcc 几乎在任何地方都可用。它可能会产生较慢的代码,但比“本机”编译器更好的诊断。)

当然,它总是可能是代码中某些不相关部分中的缓冲区溢出或其他内存管理问题,而这些问题恰好不会在您的原始平台上引起任何可见的错误。

如果您无法访问一个好的调试器,请至少在关键位置尝试 printf'ing 东西。

于 2010-08-19T18:30:21.983 回答
1

内存区域是否可以to重叠frommemcpy不需要处理重叠的内存区域。如果这是您的问题,那么解决方案就像使用memmove一样简单。

于 2010-08-19T19:06:44.870 回答
0

sizeof()确定支持吗?

于 2010-08-19T18:20:27.797 回答