FORTRAN:Erreur de segmentation

Résolu/Fermé
imen - 10 mars 2010 à 15:58
 Tsubi - 18 avril 2011 à 18:15
Bonjour,
En fait j'ai à programmer en fortran un programme pour extraire une partie d'une matrice de taille (1440,400)
voici mon programme

PROGRAM MAIN
DOUBLE PRECISION :: tab(400,1440)
DOUBLE PRECISION ::trmm(68,210)
integer:: i,j,k,n
open(unit=29,file='input',STATUS='old')
DO j=1,1440
READ(29,*)(tab(i,j),i=1,400)
ENDDO
close(unit=29)
n=0
k=1
do j=680,890
do i=322,390
n=n+1
trmm(n,k)=tab(i,j)
enddo
n=1
k=k+1
enddo
OPEN(UNIT=1,FILE='output')
do j=1,210
write(1,*)(trmm(i,j),i=1,68)
enddo
END



Je pense que l'erreur est à ce niveau là
n=0
k=1
do j=680,890
do i=322,390
n=n+1
trmm(n,k)=tab(i,j)
enddo
n=1
k=k+1
enddo
Je recois l'errur lors de l'exécution "Erreur de segmentation"
SVP c trèèèèèèèèèèèès urgent vous pouvez m'aider à résoudre ce problème surtout que si je teste ce même programme pour une petite matice ça marche normalement!!!!
merci bcp

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
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.
2
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
0
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 :)
0
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?
0

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 !
0
Super! Merci! Ca a fonctionné. j'avais mal compris le concept :) maintenant c'est rectifié. Un grand merci!
0