2014-06-30 173 views
1

当我编译我的程序与运行时检查,我得到以下错误(我不知道为什么):运行时检查失败

ifort -check all test.f90 -o test 
./test 
forrtl: severe (193): Run-Time Check Failure. The variable 'my_sum$2$_2' is being used without being defined 
Image  PC      Routine   Line   Source 
sum   0000000000403098  Unknown    Unknown  Unknown 
sum   0000000000403098  Unknown    Unknown  Unknown 
sum   0000000000403098  Unknown    Unknown  Unknown 
sum   0000000000403098  Unknown    Unknown  Unknown 
. 
. 
. 
sum   0000000000403098  Unknown    Unknown  Unknown 
sum   0000000000402EAF  Unknown    Unknown  Unknown 
sum   0000000000402DE6  Unknown    Unknown  Unknown 
libc.so.6 00007F7FEB268BE5  Unknown    Unknown  Unknown 
sum   0000000000402CD9  Unknown    Unknown  Unknown 

的代码是:

program test 

    implicit none 
    real(8) :: x 

    x=my_sum(lambda_i,0,200) 
    print*,x 

contains 

    function lambda_i(n) result(i) 
     real(8) :: i 
     integer,intent(in) :: n 
     i=dble(n) 
    end function 

    recursive function my_sum(f,i,n) result(s) 
     implicit none 
     real(8) :: s 
     integer, intent(in) :: i,n 
     interface 
     function f(n) 
     implicit none 
     real(8) :: f 
     integer,intent(in) :: n 
     end function 
     end interface 

     if (n .ge. 0) s=f(n)+my_sum(f,i,n-1) 
    end function 

end program 

任何想法?没有检查,程序运行正常,除非我达到递归限制。

+0

我ifort产生了价值20100,可避免不崩溃(版本14在Windows上)。 Gfortran具有相同的价值,Abosft 2014无法编译(因为它希望lambda_i声明为外部函数,即使它是内部函数)。如果我将lambda_i“外部化”,我仍然可以获得20100. –

回答

4

我认为这个问题是

if (n .ge. 0) s=f(n)+my_sum(f,i,n-1) 

一旦你到达n .lt. 0,返回值s没有定义,函数返回一个未定义的变量(就像ifort抱怨)。由于这是递归的最后一步,所有其他结果都取决于此,所以总结果是未定义的。

这可以通过使用

if (n .ge. 0) then 
    s=f(n)+my_sum(f,i,n-1) 
else 
    s=0._8 
endif 
+1

当然,你是对的,但有趣的是,你用三个编译器获得了同样的价值。如果你在你建议的else子句中设置s = 0,它也是你的价值。也就是说,他们都似乎初始化为零。 –

+0

对,谢谢。 – PeMa

相关问题