一個小測試程序在linux 64bit上用gfortran(4.4.5)返回一個段錯誤。 n = 2_8 ** 22_8時不存在故障。 Gdb表示在循環的第一次迭代期間,函數mylen中出現了分段錯誤。Gfortran:長字符的分段錯誤
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
我在Ubuntu 10.04上發現gfortran 4.8.1版本沒有問題。你能更新gfortran嗎? – darthbith
不幸的是,否: -/ – user1824346
您可能會嘗試安裝備用編譯器,而不更新與OS一起安裝的編譯器。看到這裏:http://gcc.gnu.org/wiki/GFortranBinaries如果你嘗試這個,你可能必須設置一些環境變量(LIBRARY_PATH或類似)。 – 2013-08-20 14:51:11