【问题标题】:Reference trough null FORTRAN pointer main参考槽空 FORTRAN 指针 main
【发布时间】:2020-12-26 20:33:40
【问题描述】:

我的程序编译得很好,但是当我运行它时,它说:

error: reference trough null FORTRAN pointer main -  in file matrix-2dim.f90 at line 31 [+0a6f]

问题出在哪里?我打印了每个变量以确保一切正常并且看起来没问题,但我无法识别此错误。

编辑:编译器是 gnu fortan 8.2.0,我使用 Plato ide 也尝试过简单的 Fortran 和 GCC 编译器也不起作用 edit2:输入文件在这里:https://gofile.io/d/QHL0EH

program input
    implicit none
    real:: A,E,L,S,x1,y1,x2,y2,sinn,coss
    integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
    real,allocatable::kt(:,:),k(:,:),ktt(:,:),dx(:),forcee(:)&
    ,D(:),T1(:,:),cousin(:),sinus(:),TT(:,:),aa(:,:),b(:,:),c(:,:),kk(:,:),f(:),bb(:,:),lt(:),elastycity(:),dd(:),stress(:),ELAA(:)
 

    open(unit=12,file='data.txt',action='read')
    open(unit=20,file='out.txt')
    read(12,*) ne
    write(*,*)'number of elements',ne
    read(12,*) n
    write(*,*)'number of nodes   ',n
    allocate(kt(2*n,2*n)),k(4,4),ktt(8,8),forcee(2*n),D(2*n),T1(6,6),cousin(3),sinus(3),TT(8,8),aa(8,8),b(8,8),c(8,8),kk(8,8),f(8),bb(8,8),ELAA(3),lt(3),elastycity(3),dd(8),stress(3))
   
    kt(:,:)=0
   
    do p=1,ne
        
    read(12,*) x1,y1,x2,y2,ss,ee,E,A
    write(*,*)'============================================================='
    write(*,*) 'element',p
    L=(((x2-x1)**2+(y2-y1)**2)**0.5)
    write(*,*)
    write(*,*)'L=    ',L
    s=(A*E)/(L)
    write(*,*)
    write(*,*)'s=     ',s

    cousin(p)=(x2-x1)/L
    sinus(p)=(y2-y1)/L
    coss=cousin(p)
    sinn=sinus(p)
    write(*,*)
    write(*,*)'cos=   ',cousin(p)
    write(*,*)
    write(*,*)'sin=   ',sinus(p)
    write(*,*)   
    
   
    k(1,1)=(coss**2)*s
    
    k(1,2)=(coss*sinn)*s
    
    k(2,1)=(coss*sinn)*s
    
    k(2,2)=(sinn**2)*s
  
    k(1,3)=-k(1,1)
    
    k(1,4)=-k(1,2)
    
    k(2,3)=-k(2,1)
    
    k(2,4)=-k(2,2)
  
    k(3,1)=-k(1,1)
    
    k(3,2)=-k(1,2)
    
    k(4,1)=-k(2,1)
    
    k(4,2)=-k(2,2)
    
    k(3,3)=k(1,1)
    
    k(3,4)=k(1,2)
    
    k(4,3)=k(2,1)
    
    k(4,4)=k(2,2)
    
     
 
    
   kt(2*ss-1,2*ss-1)=kt(2*ss-1,2*ss-1)+k(1,1)
    kt(2*ss-1,2*ss)=kt(2*ss-1,2*ss)+k(1,2)
    kt(2*ss-1,2*ee-1)=kt(2*ss-1,2*ee-1)+k(1,3)
    kt(2*ss-1,2*ee)=kt(2*ss-1,2*ee)+k(1,4)
    kt(2*ss,2*ss-1)=kt(2*ss,2*ss-1)+k(2,1)
    kt(2*ss,2*ss)=kt(2*ss,2*ss)+k(2,2)
    kt(2*ss,2*ee-1)=kt(2*ss,2*ee-1)+k(2,3)
    kt(2*ss,2*ee)=kt(2*ss,2*ee)+k(2,4)
    kt(2*ee-1,2*ss-1)=kt(2*ee-1,2*ss-1)+k(3,1)
    kt(2*ee-1,2*ss)=kt(2*ee-1,2*ss)+k(3,2)
    kt(2*ee-1,2*ee-1)=kt(2*ee-1,2*ee-1)+k(3,3)
    kt(2*ee-1,2*ee)=kt(2*ee-1,2*ee)+k(3,4)
    kt(2*ee,2*ss-1)=kt(2*ee,2*ss-1)+k(4,1)
    kt(2*ee,2*ss)=kt(2*ee,2*ss)+k(4,2)
    kt(2*ee,2*ee-1)=kt(2*ee,2*ee-1)+k(4,3)
    kt(2*ee,2*ee)=kt(2*ee,2*ee)+k(4,4)
    
    do jj=1,4
  write(*,*)k(jj,:)
 end do
    end do
   
  write(*,*)
  
  do jj=1,6
  write(*,*)kt(jj,:)
  end do
   
 
 
   end

【问题讨论】:

  • 欢迎您,请拨打tour。如果您有错误消息,您必须向我们展示产生错误的确切代码。见How to Askminimal reproducible example
  • 特别是我们需要看到你的变量和数组的声明。我们需要看看XY 是如何声明的。我们需要查看整个 functionsubroutineprogram 或您显示这些行的任何其他单元。我们只需要查看更多代码。我们应该能够尝试编译您的完整示例并得到您的错误。
  • 谢谢,兄弟我修好了。现在我有一个更大的问题并更改了帖子,如果您看一下,我将不胜感激
  • 您在新帖子中没有提出任何问题。您发布的代码有问题吗?你有什么问题?
  • 看来你是对的。我真的无法表达我的问题我调整了谢谢你指出来。

标签: fortran


【解决方案1】:

问题有多种原因。

  1. 第 13 行中的 allocate 语句在第一个变量之后立即关闭。
  2. 第 13 行中的 allocate 语句太长,需要通过在 b 变量前插入换行符 & 将其换到下一行。
  3. 给定的输入文件有一个空的第二行,因此kt 的大小为[0,0],并在访问时引发错误。

第 13 行可以替换为

...
allocate (kt(2*n,2*n),k(4,4),ktt(8,8),forcee(2*n),D(2*n),T1(6,6),        &
  &       cousin(3),sinus(3),TT(8,8),aa(8,8),b(8,8),c(8,8),kk(8,8),f(8), &
  &       bb(8,8),ELAA(3),lt(3),elastycity(3),dd(8),stress(3)            )
...

请注意,您的代码在使用调试标志进行编译时仍会引发警告。

$ gfortran -Wall -g3 -fcheck=all -fuse-ld=bfd a.f90 && ./a.out
a.f90:4:40:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                                        1
Warning: Unused variable ‘dis’ declared at (1) [-Wunused-variable]
a.f90:4:36:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                                    1
Warning: Unused variable ‘diss’ declared at (1) [-Wunused-variable]
a.f90:5:49:

    5 |   real,allocatable::kt(:,:),k(:,:),ktt(:,:),dx(:),forcee(:)&
      |                                                 1
Warning: Unused variable ‘dx’ declared at (1) [-Wunused-variable]
a.f90:4:46:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                                              1
Warning: Unused variable ‘force’ declared at (1) [-Wunused-variable]
a.f90:4:25:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                         1
Warning: Unused variable ‘i’ declared at (1) [-Wunused-variable]
a.f90:4:28:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                            1
Warning: Unused variable ‘ii’ declared at (1) [-Wunused-variable]
a.f90:4:48:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                                                1
Warning: Unused variable ‘j’ declared at (1) [-Wunused-variable]
a.f90:4:54:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                                                      1
Warning: Unused variable ‘kj’ declared at (1) [-Wunused-variable]
a.f90:4:51:

    4 |   integer::ne,p,n,ss,ee,i,ii,jj,diss,dis,force,j,xx,kj
      |                                                   1
Warning: Unused variable ‘xx’ declared at (1) [-Wunused-variable]
 number of elements           2
 number of nodes              3
 =============================================================
 element           1

 L=       10.0000000    

 s=        6000000.00    

 cos=      0.00000000    

 sin=      1.00000000    

   0.00000000       0.00000000      -0.00000000      -0.00000000    
   0.00000000       6000000.00      -0.00000000      -6000000.00    
  -0.00000000      -0.00000000       0.00000000       0.00000000    
  -0.00000000      -6000000.00       0.00000000       6000000.00    
 =============================================================
 element           2

 L=       14.1421356    

 s=        4242640.50    

 cos=     0.707106769    

 sin=     0.707106769    

   2121320.00       2121320.00      -2121320.00      -2121320.00    
   2121320.00       2121320.00      -2121320.00      -2121320.00    
  -2121320.00      -2121320.00       2121320.00       2121320.00    
  -2121320.00      -2121320.00       2121320.00       2121320.00    

   2121320.00       2121320.00       0.00000000       0.00000000      -2121320.00      -2121320.00    
   2121320.00       8121320.00       0.00000000      -6000000.00      -2121320.00      -2121320.00    
   0.00000000       0.00000000       0.00000000       0.00000000       0.00000000       0.00000000    
   0.00000000      -6000000.00       0.00000000       6000000.00       0.00000000       0.00000000    
  -2121320.00      -2121320.00       0.00000000       0.00000000       2121320.00       2121320.00    
  -2121320.00      -2121320.00       0.00000000       0.00000000       2121320.00       2121320.00   

我在哪里使用了以下 data.txt 文件(注意第 2 行中的 3

2 4 3 3 1
3
0 0 0 10 1 2 2 30e6
0 0 10 10 1 3 2 30e6
0 0 10 0 1 4 2 30e6

【讨论】:

  • 非常感谢。kt 的问题真的要了我的命。我是编码的超级新手,我必须为我的项目这样做,这个社区对他们的知识非常有帮助和慷慨
猜你喜欢
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多