Fortran Coder

查看: 85|回复: 2

[子程序] 调用子程序为读取数据为动态数组赋值报错

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
7 点
发表于 2019-5-29 14:48:46 | 显示全部楼层 |阅读模式
我在调用子程序读入数据赋值到动态数组中时,一赋值就报 访问冲突,一直搞不懂问题的原因是什么,求助


[Fortran] 纯文本查看 复制代码
program main 
  implicit none
  character,allocatable:: A(:,:)
  integer:: m,n,nx,ny
  character(len=200):: filename
  integer:: i,j,iunit,mbc
  filename="d:\2.txt"
  nx=2
  ny=2
  allocate(A(nx,ny))
  call read_txt(A,1,filename,m,n,nx,ny)
  
  print*,A
  end program

subroutine  read_txt(input,iunit,filename,m,n,nx,ny)
  implicit none
  !函数内部变量声明
  integer:: iunit,m,n
  integer:: nx,ny
  character(len=200):: filename
  character(len=200):: input(nx,ny)
  !局部变量
  integer:: i,j
  character(len=200):: line
  character,allocatable:: temp(:)
  
  open(unit=iunit,file=filename)
  read(iunit,"(a)")line
  read(line,*)m,n
  
  allocate(temp(n))
  do i=1,m
    read(iunit,"(a)")line
    read(line,*)(temp(j),j=1,n)
    do j=1,n
      !print*,temp(j)
      input(i,j)=temp(j)
    enddo
  enddo
  close(iunit)
  end subroutine



QQ图片20190529144418.png
QQ图片20190529144606.png
回复

使用道具 举报

27

帖子

0

主题

0

精华

熟手

F 币
252 元
贡献
97 点

规矩勋章元老勋章新人勋章

发表于 2019-5-29 15:20:16 | 显示全部楼层
实参的字符串长度是1
character,allocatable:: A(:,:)
虚参的字符串长度是200
character(len=200):: input(nx,ny)

自然就错了。

另外,你为什么先读到 temp 里?不能直接读到 input 里吗?
[Fortran] 纯文本查看 复制代码
subroutine  read_txt(input,iunit,filename,m,n,nx,ny)
  implicit none
  !函数内部变量声明
  integer:: iunit,m,n
  integer:: nx,ny,i
  character(len=200):: filename
  character:: input(nx,ny)
  !局部变量
  open(unit=iunit,file=filename)
  read(iunit,*) m,n
  do i = 1 , m
    read(iunit,*) input(i,:n)
  end do  
end subroutine
天之道,损有余而补不足

2

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
7 点
 楼主| 发表于 2019-5-29 15:49:00 | 显示全部楼层
胡文刚 发表于 2019-5-29 15:20
实参的字符串长度是1
character,allocatable:: A(:,:)
虚参的字符串长度是200

啊啊,就是这样,万分感谢,我自己马大哈了,没注意到。之前为了排除问题就先读入了temp。再次感谢!!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-6-27 11:00

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表