FORTRAN:Erreur de segmentation
Résolu/Fermé
A voir également:
- FORTRAN:Erreur de segmentation
- Compilateur fortran windows 10 ✓ - Forum Programmation
- Fortran runtime error: end of file - Forum Programmation
- Télécharger fortran 95 gratuit - Forum Programmation
- Fortran 77 download - Forum C++
- Fortran - Forum Linux / Unix
6 réponses
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
10 mars 2010 à 16:05
10 mars 2010 à 16:05
do j=680,890
do i=322,390
n=n+1
trmm(n,k)=tab(i,j)
enddo
n=0
k=k+1
enddo
Je pense. n doit prendre la valeur 69 à la fin de la deuxième boucle.
Pour débuguuer, il faut imprimer tes valeurs d'indice et voir celle qui merde.
do i=322,390
n=n+1
trmm(n,k)=tab(i,j)
enddo
n=0
k=k+1
enddo
Je pense. n doit prendre la valeur 69 à la fin de la deuxième boucle.
Pour débuguuer, il faut imprimer tes valeurs d'indice et voir celle qui merde.
Bonjour,
J'ai également une erreur de segmentation dans mon code fortran. Lors de l'exécution j'ai le message d'erreur "erreur de segmentation". J'en suis désespéré. C'est pourtant un code simple, je commence seulement à coder pour mes cours.
program main
implicit none
integer tau,pc1,pc2,dc,t,dt,n
real v(0:1),db,ve(0:1),pd(0:1000),pe(0:1000),pdo
pc1=270
pc2=370
dc=pc2-pc1
tau=5
dt=1
db=150
pdo=200
T=3000
t=100
OPEN(10,file='sahara.dat')
v(0)=1.0
n=0
DO n=0,t
pd(n)=pdo*(1-n/T)
pe(n)=pd(n)+db*v(n)
if (pe(n).GE.pc2) then
ve(n)=1.0
else if (pe(n).LE.pc1) then
ve(n)=0.0
else
ve(n)=(pe(n)-pc1)/dc
end if
v(n+1)=(ve(n)-v(n))/tau+v(n)
write(10,*)t,ve(n)
END DO
CLOSE(10)
end program
Je crois qu'il y a bcp de superflux, mais si dans tout ce superflux vous saviez au moins m'indiquer où se situe le problème, je vous serais vraiment reconnaissant.
Merci
J'ai également une erreur de segmentation dans mon code fortran. Lors de l'exécution j'ai le message d'erreur "erreur de segmentation". J'en suis désespéré. C'est pourtant un code simple, je commence seulement à coder pour mes cours.
program main
implicit none
integer tau,pc1,pc2,dc,t,dt,n
real v(0:1),db,ve(0:1),pd(0:1000),pe(0:1000),pdo
pc1=270
pc2=370
dc=pc2-pc1
tau=5
dt=1
db=150
pdo=200
T=3000
t=100
OPEN(10,file='sahara.dat')
v(0)=1.0
n=0
DO n=0,t
pd(n)=pdo*(1-n/T)
pe(n)=pd(n)+db*v(n)
if (pe(n).GE.pc2) then
ve(n)=1.0
else if (pe(n).LE.pc1) then
ve(n)=0.0
else
ve(n)=(pe(n)-pc1)/dc
end if
v(n+1)=(ve(n)-v(n))/tau+v(n)
write(10,*)t,ve(n)
END DO
CLOSE(10)
end program
Je crois qu'il y a bcp de superflux, mais si dans tout ce superflux vous saviez au moins m'indiquer où se situe le problème, je vous serais vraiment reconnaissant.
Merci
Pour commencer... Fortran ne fait pas la différence entre la majuscule et la miniscule !! Vous mettez deux variables différentes T et t mais vous êtes en train d'ecraser la 1 ère. Du coup la variable t a pour valeur 100 dans la suite de votre programme !!
Vous pouvez voir ça (mettre deux noms différents) ! j'espère que ça marchera :)
Vous pouvez voir ça (mettre deux noms différents) ! j'espère que ça marchera :)
Merci de me venir en aide. :)
Malheureusement cela n'a rien changé... Mais je prends note du conseil pour mes futures applications.
Je le compares à d'autres programe d'autres personnes et je ne vois pas dans ma structure où se situe le problème :s N'est-ce pas en rapport avec le tableau? Ou que le "t" est trop grand?
Malheureusement cela n'a rien changé... Mais je prends note du conseil pour mes futures applications.
Je le compares à d'autres programe d'autres personnes et je ne vois pas dans ma structure où se situe le problème :s N'est-ce pas en rapport avec le tableau? Ou que le "t" est trop grand?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Les deux tableau v et ve sont définis de dimension 2 alors qu'ils prennent des indices n>2 dans la boucle DO n=0,t
v(0:1),ve(0:1),pd(0:1000),pe(0:1000),pdo
J'ai essayé de mettre v(0,1000) et ve (0:1000) comme les autres déclarations au début du programme ... et ça tournait mais je ne sais pas trop pour votre calcul !
v(0:1),ve(0:1),pd(0:1000),pe(0:1000),pdo
J'ai essayé de mettre v(0,1000) et ve (0:1000) comme les autres déclarations au début du programme ... et ça tournait mais je ne sais pas trop pour votre calcul !