我正在编写Fortran 90代码(下面),我收到了段错(核心转储)错误。什么是Core Dumped以及如何解决?
program make_pict
IMPLICIT NONE
INTEGER, PARAMETER :: REAL8=SELECTED_REAL_KIND(15,300)
INTEGER, SAVE :: nstp,npr,step
REAL(REAL8), SAVE :: r
REAL(REAL8), DIMENSION(:,:), ALLOCATABLE, SAVE :: f,fa
INTEGER :: xw,yw,x,y
REAL:: ax,ay
INTEGER, DIMENSION(250000) :: pxa
REAL(REAL8) :: s,s2
LOGICAL, SAVE :: initialized=.FALSE.
WRITE(*,*) 'give values ax,ay'
READ(*,*) ax,ay
xw = 256
yw = 256
OPEN(1,FILE='picture.pxa')
do x=0, xw-1
do y=0, yw-1
f(x,y)=(765./2)*(ax*(1-cos(2*3.14159*x*(1.0/xw)))+ay(1+cos(2*3.14159*y*(1.0/yw))))
end do
end do
WRITE(1,'(2I6)') xw,yw
ALLOCATE(f(0:xw-1,0:yw-1),fa(0:xw-1,0:yw-1))
DO y=0,yw-1
WRITE(1,'(256I4)') (f(x,y),x=0,xw-1)
END DO
CLOSE(1)
initialized=.TRUE.
step=0
nstp=100
end program make_pict
答案 0 :(得分:1)
您尝试在分配之前设置f
。你需要在双循环之前设置allocate语句!自己解决这个问题的一种方法是将输出语句放在任何地方,这将精确定位错误的位置。
我注意到的其他一些问题:
*
中的ay(
。实际上,我很惊讶为你编写的这段代码。pi
使用这种低精度值?您是否要求精确到第15个小数,但pi
的值仅为6?要回答您的第二个问题,可能会出现多个段错误。核心转储仅指系统对分段故障的处理。分段错误的原因很多;尝试访问未分配的数组就是其中之一。