【问题标题】:Segmentation fault, assigning arrays - with Intel v14分段错误,分配数组 - 使用 Intel v14
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 非常感谢!这确实解决了问题。
猜你喜欢
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2013-02-17
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多