Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Absolft Fortran但不使用gfortran时,代码在运行时崩溃_Fortran_Gfortran - Fatal编程技术网

使用Absolft Fortran但不使用gfortran时,代码在运行时崩溃

使用Absolft Fortran但不使用gfortran时,代码在运行时崩溃,fortran,gfortran,Fortran,Gfortran,我正在运行一个类似于下面代码的脚本。在过去,当我运行脚本f90-o fakefile fakefile.f和/fakefile时,它工作正常,但现在它没有工作,并立即返回一个分段错误(内核转储)错误。当我使用gfortran fakefile.f然后使用/a.out时,代码运行良好。我无法找出使用这两种编译方法之间的差异 program fakefile implicit real*8(a-h,o-z) parameter(im9=4320,jm9=2160) paramet

我正在运行一个类似于下面代码的脚本。在过去,当我运行脚本
f90-o fakefile fakefile.f
/fakefile
时,它工作正常,但现在它没有工作,并立即返回一个
分段错误(内核转储)
错误。当我使用
gfortran fakefile.f
然后使用
/a.out
时,代码运行良好。我无法找出使用这两种编译方法之间的差异

 program fakefile
   implicit real*8(a-h,o-z)
   parameter(im9=4320,jm9=2160)
   parameter(im1=360,jm1=180)
   parameter(im25=1440,jm25=720)
   parameter(nlt=2)
   real*4 rrs(im9,jm9,nlt)
   real*8 rrsa25(im25,jm25,nlt)
   real*8 area25(im25,jm25,nlt)
   real*8 rrsa1(im1,jm1,nlt)
   real*8 area1(im1,jm1,nlt)
   rrsa1  = 0.0
   area1  = 0.0
   rrsa25 = 0.0
   area25 = 0.0
   rrs = 0.0
   print *, rrs

 end

您的分段错误是由于使用大型阵列覆盖堆栈造成的。这是Absolft和Intel Fortran编译器上的常见问题。对于编译器(Absoft),使用
-s
标志告诉编译器在堆上而不是堆栈上分配数组。另一种方法是增加shell中的堆栈大小限制(管理员可能会限制)

请参阅Absolft常见问题解答:

A.使用“-s”编译器选项(静态存储)移动 从堆栈到堆的数据或使用ulimit command(ulimit是一个bash命令-csh相当于 “ulimit-s”是“限制堆栈”),以提高堆栈大小限制

#ulimit-s 8192
#ulimit-s32768
#ulimit-s 32768

一旦提高,限值适用于电流 进程及其任何子进程


你知道是哪一条线引起的问题吗?把陈述一个接一个地拿出来,直到你找到了冒犯的陈述。那么,当试图打印9331200个零实数时,屏幕看起来如何?可能会将数组的大小更改为也进行检查。@ja72程序似乎不喜欢:real*4 rrs(im9、jm9、nlt),数组大小是否大于f90允许的大小?到目前为止,我还没有遇到过这个问题,并且我使用了具有相同数组大小的类似脚本。
f90
使用的是什么编译器(请尝试
f90-v
查看)?gfortran是Fortran 90(95/2003/2008)编译器。我正要问同样的问题!我见过
f90
甚至是链接到
gfortran
的系统。您正在谈论一个名为
f90
…的脚本。。。你能发布脚本吗?@casey它返回:Absolft 64位Pro Fortran 11.5.2。我想我可能已经发现我的问题是服务器上的堆栈大小限制。在c shell中执行限制返回:stacksize 10240kbytes