SIGSEGV:分段错误 - 无效的内存引用

时间:2015-10-29 09:36:46

标签: reference segmentation-fault fortran fortran90 gfortran

我是Fortran的初学者。我必须使用函数和数组创建一个程序,但它不起作用。我尝试使用调试器:

-g -fcheck-bounds -fbacktrace -fimplicit-none etc

但没有错。

这是我的功能:

    FUNCTION tabspot (i, j, OFFSHORE, hauteurhoulemin, hauteurhoulemax)
    IMPLICIT NONE

    !---------------------------------------
    !   Déclaration des arguments
    !---------------------------------------


    INTEGER, INTENT(INOUT) :: i, j
    CHARACTER(LEN=5), INTENT(OUT) :: OFFSHORE
    INTEGER, INTENT(OUT):: hauteurhoulemin
    INTEGER, INTENT(OUT):: hauteurhoulemax


    !---------------------------------------
    !   Déclaration du type de la fonction
    !---------------------------------------

    CHARACTER(LEN=14), DIMENSION(4) :: tabspot

    !---------------------------------------
    !   Déclaration des varibles locales
    !---------------------------------------

    CHARACTER(LEN=14) :: box

        tabspot(1) = 'Cotedesbasques'
        tabspot(2) = 'Mundaka'
        tabspot(3) = 'Parlementia'
        tabspot(4) = 'Hendaye'


DO i=1,4
    SELECT CASE (i)
        CASE(1)
            OFFSHORE = 'EST'
            hauteurhoulemin = 30
            hauteurhoulemax = 150
        CASE(2)
            OFFSHORE = 'SUD'
            hauteurhoulemin = 90
            hauteurhoulemax = 400
        CASE(3)
            OFFSHORE = 'EST'
            hauteurhoulemin = 120
            hauteurhoulemax = 500
        CASE(4)
            OFFSHORE = 'SUD'
            hauteurhoulemin = 60
            hauteurhoulemax = 200
    END SELECT

    DO j=i+1,5
        IF (((vent1%direction == OFFSHORE) .AND. (hauteurhoule>=hauteurhoulemin)&
            .AND. (hauteurhoule<=hauteurhoulemax)) .OR. &
            ((vent1%force == 0) .AND. (hauteurhoule>=hauteurhoulemin)&
            .AND. (hauteurhoule<=hauteurhoulemax)))THEN

            box=tabspot(i)
            tabspot(i)=tabspot(j)
            tabspot(j)=box

        END IF
    END DO
END DO

END FUNCTION

提前感谢您的回答。 马丁

0 个答案:

没有答案