【发布时间】:2016-02-22 08:24:36
【问题描述】:
我正在尝试编译和运行本应使用英特尔编译器版本 11 成功编译和运行的代码。但是我有版本 14,如果没有分段错误,我无法运行它。
subroutine iireg2(iidata,iicoeffs)
use myparams
implicit none
real(8):: iidata(:,:)
real(8)::z(size(iidata,1),size(iidata,2)-1)
real(8)::iicoeffs(size(iidata,2)-1)
integer:: ncoeffsa,flag1,i
ncoeffsa=size(iidata,2)-1
print*, 'this is ncoeffsa', ncoeffsa
print*, 'this is aaiadata1', iidata(1,:)
print*, 'this is size', size(iidata,2)-1
print*, 'this is aaiadata2', iidata(1,2:(ncoeffsa+1))
print*, 'this is aaiadata2', iidata(143345,2:(ncoeffsa+1))
print*, 'dimz 1', size(z,1)
print*, 'dimz 2', size(z,2)
print*, 'dimiidata 1', size(iidata,1)
print*, 'dimiidata 2', size(iidata,2)
! segmentation fault occurs if I uncomment below
! and pass N x 12 array. If I pass N x 1 array
! I do not get segmentation fault.
!z(:,:)=iidata(:,2:(ncoeffsa+1))
end subroutine iireg
我用类似下面的方式调用那个子例程
print*, 'stempp', stempp
print*, 'siidata outside', siidata(1,:)
print*, 'siidata 1 dim', size(siidata,2)-1
print*, 'siidata 2 dim', size(siidata,1)
siidata = siidata*0
stempp = stempp*0
call iireg2(siidata,stempp)
在我使用这个子程序之前,我会打印并确保所有尺寸都是正确的。我现在还用零替换了矩阵的所有条目。所有尺寸和尺寸都匹配。变量类型也是正确的。如果我传递尺寸为 N x 1(N 约为 10,000)的东西,该函数将成功运行。但是,当我通过恰好是 N x 12 的东西时,我会遇到分段错误。
【问题讨论】:
-
是调用范围内可用子例程的显式接口(如果没有,则需要一个)。您是否可能遇到堆栈大小限制?您是否使用 -heaparrays 选项进行编译?
-
你使用模块吗?还是接口块?该子程序相对于调用代码在哪里?你能准备一个完整的小例子吗? stackoverflow.com/help/mcve
标签: segmentation-fault fortran intel