一个操作系统上的内存损坏是否会导致编程错误?

时间:2018-02-02 21:00:03

标签: fortran intel-fortran memory-corruption

我正在开发一个项目,我需要在某个时候使用别人的代码。

然而,我跑的测试给我带来了奇怪的结果。在一个操作系统上,代码似乎运行正常,但另一方面似乎存在问题。

我试图追踪问题并找到一个循环,通过添加write语句可以解决问题。我怀疑内存损坏,所以我做了以下事情:

假设在循环中访问了3个变量:

integer a(100),b(100),c(100)

我添加了1个变量

integer a(100),b(100),dummyvar,c(100)

然后我在代码的第一行设置dummyvar0。当我在程序结束时打印dummyvar时,程序末尾的dummyvar值是变量c的最后一个值。这些代码太长,无法找到导致此问题的原因。

到目前为止,我已经尝试过:

  1. 手动检查数组和子程序的边界(尽我所能)以发现可能的数组外问题。
  2. 使用编译器参数,例如-fpe0 -traceback等...
  3. 在向我的主管报告之前我需要知道的是:在一个设置中但是在另一个设置中没有代码失败意味着代码存在问题吗?或者它可能以某种方式与库,操作系统等相关?

    代码“似乎”正常运行的设置是:

    • CentOS版本5.11(最终版)
    • 英特尔(R)Fortran英特尔(R)64编译器XE 适用于在英特尔(R)64版本13.0.1.117 Build上运行的应用程序 20121010

    代码失败的设置是:

    • Ubuntu 16.04.3 LTS
    • 英特尔(R)Fortran英特尔(R)64编译器,适用于运行在英特尔(R)64,版本17.0.1.132 Build 20161005上的应用程序

    最后,尽管版本不同,但GNU编译器在两台计算机上都能正常工作。

0 个答案:

没有答案