Bonjour,
j'ai commencé à faire un petit programme pour simuler une partie de black jack, quand je compile, tout va bien, mais régulièrement (soit immédiatement, soit qq coups plus tard) j'ai cette erreur qui tombe :

Exception: Access Violation
At line 135 of file bj.f90
Traceback: (Innermost first)
Called from line 124 of file bj.f90
NB: (le called from line peut varier 125,127 par exemple)
J'ai beau chercher je ne comprend pas, je pensais que c'était les goto, mais non, j'ai rajouté un bloc interface, ça ne change pas. D'après les repères, c'est au niveau des appels de fonctions que ça bloque.
Si qq'un a une idée, merci d'avance !

voilà le programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
program black_jack
implicit none 
integer,external :: somme
integer,external :: search
real :: alea
integer :: nbr_jeux,i,k,res,nbr_cartes,l,temp
integer,dimension(1:13,1:2) :: paquet ! 1=mbr restant 2=valeur
integer,dimension(1:312) :: sabot
integer,dimension(1:13) :: croupier,joueur1,joueur2,joueur3 
 
 
! demande du nombre de jeu
nbr_jeux=6
nbr_cartes=nbr_jeux*52
 
10 continue
!définition valeur des cartes
paquet(:,2)=10
do i=2,9
    paquet(i,2)=i
end do
paquet(1,2)=11
 
!mise a zero des jeux de chaque personnes
croupier=0;joueur1=0;joueur2=0;joueur3=0
 
!!! melange du paquet
    !preparation du paquet (jeu non melange)
    paquet(1:13,1)=4*nbr_jeux
 
k=13
do i=1,nbr_cartes
    call random_seed
    call random_number(alea) 
    res=k*alea+1
    sabot(i)=paquet(res,2)
    paquet(res,1)=paquet(res,1)-1
 
    !diminution de la longueur de recherche
    if (paquet(res,1)==0) then
        paquet(res,1)=paquet(k,1)
        paquet(res,2)=paquet(k,2)
        k=k-1
    end if
end do
 
 
! distribution premieres cartes
 
joueur1(1)=sabot(1)
joueur1(2)=sabot(2)
 
joueur2(1)=sabot(3)
joueur2(2)=sabot(4)
 
croupier(1)=sabot(5)
 
k=6
! tour du joueur 1
    l=3
1 continue
    do while(somme(joueur1)<17)
        joueur1(l)=sabot(k)
        l=l+1
        k=k+1
    end do
        if ((somme(joueur1)>21).or.(search(joueur1)/=0)) then !ligne 67
            temp=search(joueur1)
            joueur1(temp)=1
            goto 1
        end if
 
! tour du joueur 2
    l=3
2 continue     
    do while(somme(joueur2)<17)
        joueur2(l)=sabot(k)
        l=l+1
        k=k+1
    end do
        if ((somme(joueur2)>21).and.(search(joueur2)/=0)) then 
            temp=search(joueur2)
            joueur2(temp)=1
            goto 2
        end if
 
! tour du croupier
    l=2
3 continue     
    do while(somme(croupier)<17)
        croupier(l)=sabot(k)
        l=l+1
        k=k+1
    end do
        if ((somme(croupier)>21).and.(search(croupier)/=0)) then 
            temp=search(croupier)
            croupier(temp)=1
            goto 3
        end if
 
print*,somme(croupier)
print*,somme(joueur1)
print*,somme(joueur2)
print*,""
print*,"Nouvelle partie ? 0=non 1=oui"
read*,k
if (k==1) then 
goto 10
else 
goto 11
end if
 
11 continue
 
end program 
 
 
integer function somme(tab)
implicit none
integer,dimension(1:13) :: tab
integer :: j
somme=0
do j=1,13
    somme=somme+tab(j)
end do
end function somme
 
integer function search(wer)
implicit none
integer,dimension(1:13) :: wer
integer :: z
z=1
search=0
do while ((search==0).or.(z<14))
    if (wer(z)==11) then          !ligne 135
        search=z
    end if
    z=z+1
end do
end function search