主题: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是出错了。
怎样定义一个形参的三维数组(和实参三维数组一个大的,每次输入实参的数组大小不固定)? 谢谢!!
我想编写个子函数,如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是出错了。
怎样定义一个形参的三维数组(和实参三维数组一个大的,每次输入实参的数组大小不固定)? 谢谢!!