Fortran 调用子例程时堆栈溢出

Fortran 调用子例程时堆栈溢出,fortran,Fortran,当我调用代码中的子例程时,我收到消息堆栈溢出。 注意:程序完全工作,没有任何消息。几天后,当我再次运行它时,它突然启动 do i=1,npop do j=1,nvar call random_number(r1) call random_number(r2) poptemp(i,j)=poptemp(i,j)+bheta*r1*(pop(i,j)-poptemp(i,j))+ &

当我调用代码中的子例程时,我收到消息堆栈溢出。 注意:程序完全工作,没有任何消息。几天后,当我再次运行它时,它突然启动

do i=1,npop
        do j=1,nvar
          call random_number(r1)
          call random_number(r2)
          poptemp(i,j)=poptemp(i,j)+bheta*r1*(pop(i,j)-poptemp(i,j))+  &
                                    bheta*r2*(pbest(j)-poptemp(i,j))
          Pk(j)=poptemp(i,j)
        end do

        call RSM(Pk,varmin,varmax,obj,lda,x,y,z,mi,sigma2,Rinv,cvg)
        objcont=objcont+1
    ftemp(i)=obj

 end do
Call RSM(..)语句向我提供了错误消息。

forrtl:严重(170):程序异常-堆栈溢出

Image              PC        Routine            Line        Source
RSM_25.exe         00CC6947  Unknown               Unknown  Unknown
RSM_25.exe         00CC3A8D  _MAIN__                   129  RSM_teste25.f90
RSM_25.exe         00CC8412  Unknown               Unknown  Unknown
RSM_25.exe         00CC6DDF  Unknown               Unknown  Unknown
RSM_25.exe         00CC6C0F  Unknown               Unknown  Unknown
KERNEL32.DLL       75E56359  Unknown               Unknown  Unknown
ntdll.dll          77947B74  Unknown               Unknown  Unknown
ntdll.dll          77947B44  Unknown               Unknown  Unknown

很抱歉,这里提供的信息完全无法判断出哪里出了问题。请提供一个简短但完整的程序来说明问题,并告诉我们您是如何编译的。您的程序可能没有问题,只是没有足够的堆栈空间。查看这篇文章:检查RSM的签名-您是否按正确的顺序获得了参数,并且所有参数都是预期类型的参数?如果Dan Sp.是正确的,一个快速简单的解决方法可能是使用
/heap arrays:XYZ
强制编译器在堆上而不是堆栈上分配大于XYZ kiB的数组。