上周写了个程序,大致结构是主程序调用多个模块中的例程。声明了一个动态数组,期望实现的功能是通过子程序读取文件数据,写入数组,然后通过该数组传出。该数组在主程序中声明如下:
real(8), allocatable:: array(:)
在例程中声明如下:
real(8), allocatable, intent(out):: array(:)
由于该数组并没有初始值,当时想着只是作为传出数据用,于是为其赋予了intent(out)属性,结果运行到此唤起了Access Violation。经过一番debug,发现错误出现在read语句,也就是访问数组的地方。该数组在主程序中成功分配,在例程中用allocated()检查,返回的是F。看来是intent(out)属性导致的。
结论:如果想要从子程序中访问一个动态数组,要么在子程序内分配,要么在主程序中分配之后传参进来,而且必须是intent(in)或(inout)。对于intent(out)这个属性,不仅仅是值传递不进来,分配状态也传递不进来。
标签:主程序,Violation,Access,FORTRAN,intent,例程,数组,分配,out From: https://www.cnblogs.com/fruitbread/p/18581351