【发布时间】:2018-04-07 05:58:00
【问题描述】:
下面的 fortran 代码出现分段错误。
但是,当我将print*,pow(10_8,i) 修改为print*,pow(j,i) 时,它不会出现分段错误。为什么?这很奇怪。
module mdl
implicit none
integer(kind=8)::n,m=1000000007
integer(kind=8)::p(1000),k(1000),div(10000000)
contains
integer(kind=8) function pow(a,pwr)
implicit none
integer(kind=8)::a,pwr
integer(kind=8)::cur
cur=pwr
pow=1
do while(cur>0)
if(mod(cur,2)==1)pow=mod(pow*a,m)
a=MOD(a*a,m)
cur=cur/2
end do
end function
end module
program main
use mdl
implicit none
integer(kind=8)::i,j,l,r,x,y
i=2
j=10
print*,pow(10_8,i)
print*,i
end program
【问题讨论】:
-
编译所有警告和调试信息:
gfortran -Wall -g和 GCC 然后 use thegdbdebugger -
使用TIO 尝试代码也会产生分段错误(使用 gfortran-7.3.1)。我尝试了一些选项,但没有有用的消息...
-
非常感谢。我尝试了 -Wall 选项,但我无法弄清楚输出消息。对不起...。对了,给参数'a'加上value属性,就可以正常工作了。
标签: segmentation-fault fortran