Ошибка сегментации _ недопустимая ссылка на память - PullRequest
0 голосов
/ 28 мая 2020

Я очень новичок в 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, производная), но я не знаю почему. xk - это 3 компонента, а сила и производная - это выходные данные, которые я должен получить. Это определение подпрограммы, для выполнения которой требуется мой основной код. Я знаю, что проблема здесь, потому что я уже получал текстовые сообщения раньше. Я поделюсь кодом, чтобы лучше показать проблему. Если мне нужно показать больше, сообщите мне. Спасибо большое!

      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

``
...