分段错误,分配数组 - 使用 Intel v14

Segmentation fault, assigning arrays - with Intel v14

我正在尝试使用 Intel 编译器版本 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 时,我得到了分段错误。

您是否尝试过 -heap-arrays 编译器选项?本文列出了分段错误的可能原因: https://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors