【发布时间】: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 Ask 和minimal reproducible example。
-
特别是我们需要看到你的变量和数组的声明。我们需要看看
X和Y是如何声明的。我们需要查看整个function或subroutine或program或您显示这些行的任何其他单元。我们只需要查看更多代码。我们应该能够尝试编译您的完整示例并得到您的错误。 -
谢谢,兄弟我修好了。现在我有一个更大的问题并更改了帖子,如果您看一下,我将不胜感激
-
您在新帖子中没有提出任何问题。您发布的代码有问题吗?你有什么问题?
-
看来你是对的。我真的无法表达我的问题我调整了谢谢你指出来。
标签: fortran