回 帖 发 新 帖 刷新版面

主题:fortran  如何定义子函数中形参数组可变?

请教一个问题!
 我想编写个子函数,如fun(field1,field2),field1和field2是三维数组。 因为我在子函数中输入实参的三维数组大小是不固定了,可能是(0:10,0:100,0:100),也可能是(0:100,0:10,0:100)。所以我定义形参数组:dimension field1(:,:,:),field2(:,:,:)。这样定义field1和field2数组,fortran默认是从1开始索引的,不是从0。我使用Debug模式跟踪过,实参(索引0)传给形参(索引1)。子函数中改变形参的值,形参(索引1)传回实参(索引0)。因为我三维实参是从0开始索引的,本以为这样没有问题,但是转换到Release模式,运行程序就出错了。 提示program execution - stack overflow错误,我根据网上的方法,修改了project settings-linker-system中stack的大小,再次运行又出现program execution - access violation 错误,网上有人说是数组下标不对(下标越界了)。 我想可能是定义field1和field2是出错了。
 怎样定义一个形参的三维数组(和实参三维数组一个大的,每次输入实参的数组大小不固定)?   谢谢!! 

回复列表 (共1个回复)

沙发

call fun( 数组1 , 数组2 , 0 , N , 0 , N , 0 , N )

subroutine fun(field1,field2,l1,l2,l3,h1,h2,h3)
  real :: field1( l1:h1 , l2:h2 , l3:h3 )
  ...
end subroutine

我来回复

您尚未登录,请登录后再回复。点此登录或注册