首页 > 解决方案 > 分段错误 _invalid 内存引用

问题描述

我对 fortran 非常陌生,所以您的帮助对我非常有用!我在执行代码时遇到了这个问题。我在其他问题中看到了同样的问题,但这对我没有用。这是我收到的问题:

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7fedb8f212ed in ???
#1  0x7fedb8f20503 in ???
#2  0x7fedb8b53f1f in ???
#3  0x7fedb956e69f in ???
#4  0x55d432e60d0f in ???
#5  0x55d432e61488 in ???
#6  0x55d432e61a72 in ???
#7  0x55d432e60ade in ???
#8  0x7fedb8b36b96 in ???
#9  0x55d432e60b19 in ???
#10  0xffffffffffffffff in ???
Violación de segmento (`core' generado)

问题与功能 agama_potforcederiv(c_object,xk,force,deriv) 有关,但我不知道为什么。xk 是一个 3 分量,而 force 和 deriv 是我必须接收的输出。这是需要我的主体代码执行的子例程的定义。我知道问题存在,因为我之前收到了文本输出。我分享了一些代码以更好地显示问题。如果我必须展示更多,请告诉我。非常感谢!

      SUBROUTINE USRFUN(XA,N,NP,FVEC,FJAC)
      INTEGER N,NP
      REAL*8 XA(N),FVEC(NP),FJAC(NP,NP),XK(3),TKK
c      REAL*8 PXE,PYE,PZE,PXXE,PYYE,PZZE,PXYE,PXZE,PYZE                                                                                                                                                     
      double precision force(3),deriv(6), pot1, agama_potforcederiv
      INCLUDE 'inc/patternspeed.f'
      INCLUDE 'inc/cpotential.f'

      write(*,*)'¿Que ocurre?'
      XK(1)=XA(1)
      XK(2)=XA(2)
      XK(3)=0.D0
      write(*,*)'¿Que ocurre?'
      pot1 =  agama_potforcederiv(c_object, xk, force, deriv)
      print*, 'Dfy/Dz', deriv(2)
      write(*,*)'si este mensaje sale soy feliz'
c      TKK=100.d0                                                                                                                                                                                          
c      CALL FISOBDEREF (TKK,XK(1),XK(2),XK(3),PXE,PYE,PZE,PXXE,PYYE,PZZE,                                                                                                                                  
c     &                 PXYE,PXZE,PYZE)                                                                                                                                                                    
      write(*,*)force(1),force(2)                                                                                                                                                                           
      FVEC(1)=force(1)-OMEGS2*XA(1)
      FVEC(2)=force(2)-OMEGS2*XA(2)
c      write(*,*)fvec(1),fvec(2)                                                                                                                                                                           
      FJAC(1,1)=deriv(1)-OMEGS2
      FJAC(1,2)=deriv(4)
      FJAC(2,1)=deriv(4)
      FJAC(2,2)=deriv(2)-OMEGS2

      RETURN
      END

``

标签: segmentation-faultfortransubroutine

解决方案


推荐阅读