Allocation dynamique de tableau
Bonsoir,
J'ai une erreur "segmentation fault" à cause d'une allocation dynamique sur un tableau. Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| FUNCTION tabspot (OFFSHORE, hauteurhoulemin, hauteurhoulemax, listespot)
IMPLICIT NONE
!---------------------------------------
! Déclaration des arguments
!---------------------------------------
CHARACTER(LEN=5), INTENT(OUT) :: OFFSHORE
INTEGER, INTENT(OUT):: hauteurhoulemin
INTEGER, INTENT(OUT):: hauteurhoulemax
CHARACTER(LEN=20), DIMENSION(4) :: listespot
!---------------------------------------
! Déclaration du type de la fonction
!---------------------------------------
CHARACTER(LEN=20), DIMENSION(:), ALLOCATABLE :: tabspot
!---------------------------------------
! Déclaration des variables locales
!---------------------------------------
INTEGER :: i,j
listespot(1) = 'Cotedesbasques'
listespot(2) = 'Mundaka'
listespot(3) = 'Parlementia'
listespot(4) = 'Hendaye'
j=0
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
IF (((vent1%direction==OFFSHORE).OR.(vent1%force<=2)).AND.(hauteurhoule>hauteurhoulemin).AND.(hauteurhoule<hauteurhoulemax)&
& .AND.(vent1%force<=7))THEN
tabspot(j)= listespot(i)
j=j+1
ALLOCATE (tabspot(j))
END IF
END DO
END FUNCTION |
Au début je n'avais pas fait d'allocation dynamique, tabspot avait toujours 4 colonnes: si un des tests était négatif ça me donnait une case vide. J'ai donc décidé de faire une allocation dynamique pour réduire la taille du tableau tabspot au nombre exact de tests positifs.
Le code compile mais à la fin de l'execution k'ai une erreur segmentation fault.
Comment puis faire pour résoudre ce problème ?
Merci d'avance pour vos réponses. =)