gpt4 book ai didi

segmentation-fault - Fortran 中非常简单的程序给我一个段错误。很困惑

转载 作者:行者123 更新时间:2023-12-04 07:55:25 28 4
gpt4 key购买 nike

我一直在疯狂地尝试在我的简单程序中将一些数据读入数组。我无法弄清楚为什么会出现段错误。我的代码开始于:

program guess_input
implicit none

CHARACTER*2, allocatable, dimension(:) :: element
double precision, allocatable, dimension(:,:) :: xyzq
INTEGER, allocatable, dimension(:) :: label,cs_num, br_num, xx_num
real, allocatable, dimension(:) :: distance
real, allocatable, dimension(:) :: ep
INTEGER :: stat, numatom, i, j
CHARACTER*80 :: line

numatom = 61502
allocate(element(numatom))
allocate(xyzq(4,numatom))
allocate(label(numatom))

OPEN(UNIT=22,FILE='EMBQ_EPF.OUT',iostat=stat)
If(stat.ne.0) Stop "File not found"

!Read in the input into two arrays

do i=1,numatom
READ(22,'(A)') line
READ(line, *) xyzq(1,i), xyzq(2,i), xyzq(3,i), xyzq(4,i), label(i)
enddo
CLOSE(22)

!Define element type in parallel array based on the charge
do i=1,numatom
if(xyzq(4,i) == 1.00) then
element(i) = 'Cs'
elseif(xyzq(4,i) == -1.00) then
element(i) = 'Br'
else
element(i) = 'XX'
endif
enddo

OPEN(33, FILE='element.out')
do i=1,numatom
write(33,*) element(i)
enddo

end program guess_input

我已经尝试找出故障,但我真的无法找出问题所在。

非常感谢任何帮助,谢谢。

最佳答案

如果您还没有准备好,我建议使用运行时下标检查进行编译。段错误的一个可能原因是下标错误。在调试期间使用最大编译器诊断是有帮助的。使用 gfortran:-O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused-parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace 。使用 ifort:-O2 -stand f03 -assume realloc_lhs -check all -traceback -warn all -fstack-protector -assume protect_parens -implicitnone-fcheck=all-check all 包括运行时下标检查;如果需要,可以只选择运行时下标检查——请参阅编译器文档。

此外:与浮点值的精确比较是有风险的。我建议将 xyzq 转换为整数变量或测试范围:

if( abs (xyzq(4,i) - 1.00) < 0.01 ) then

关于segmentation-fault - Fortran 中非常简单的程序给我一个段错误。很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883667/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com