gpt4 book ai didi

segmentation-fault - Gfortran : Segmentation fault with long character

转载 作者:行者123 更新时间:2023-12-04 02:48:24 29 4
gpt4 key购买 nike

一个小型测试程序在 64 位 Linux 上使用 gfortran (4.4.5) 返回段错误。 n=2_8**22_8 时不存在故障。 gdb 指示在循环的第一次迭代期间函数 mylen 中发生段错误。

allocate, stat=           0
size : 8388608
len, switch=false : 8388608
Segmentation fault

谢谢

function mylen(abc,n, switch) 

implicit none

logical, intent(in) :: switch
integer(kind=8), intent(in) :: n
logical, dimension(1:n), intent(in) :: abc
integer(kind=8) :: mylen
character(len=size(abc,dim=1,kind=8)) :: tmp
integer(kind=8) :: i

mylen=len(tmp,kind=8)
if (switch) then
do i=1,len(tmp,kind=8)
tmp(i:i)='a'
enddo
endif

end function mylen

program test

implicit none

integer(kind=8) :: n
logical, allocatable :: abc(:)
integer(kind=8) :: mylen
integer :: ierr

n=2_8**23_8
allocate(abc(n),stat=ierr)
print *,'allocate, stat=',ierr
print *,'size :', size(abc,dim=1,kind=8)
print *,'len, switch=false :', mylen(abc,n,.false.)
print *,'len, switch=true :', mylen(abc,n,.true.)

end program test

最佳答案

我对此进行了测试,发现如果字符数组太大,堆栈就会崩溃。如果您使用可分配长度的字符串并将其分配在“mylen”的顶部,它会进入堆并且程序可以运行。

关于segmentation-fault - Gfortran : Segmentation fault with long character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337031/

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