Langage C: Exception en point flottant
enacien
-
viruk -
viruk -
Bonjour,
voici mon code:
je l'explique un peu: c'est un partie de programme visant à faire de l'ascii_art.
le problème se situe à la fin de choix_chara: lorsque je lance le programme cela me met un "Exception en point flottant" mais lorsque que je remplace e=choix(l) par une valeur fixe, cela fonctionne.
une ou deux précisions utiles: l est une liste structurée, j'ai bien inclus toutes les librairies nécessaires, initialisé le timeur plus haut pour la fonction random...
je ne comprends pas cette erreur.
Avez-vous une idée?
voici mon code:
je l'explique un peu: c'est un partie de programme visant à faire de l'ascii_art.
le problème se situe à la fin de choix_chara: lorsque je lance le programme cela me met un "Exception en point flottant" mais lorsque que je remplace e=choix(l) par une valeur fixe, cela fonctionne.
une ou deux précisions utiles: l est une liste structurée, j'ai bien inclus toutes les librairies nécessaires, initialisé le timeur plus haut pour la fonction random...
je ne comprends pas cette erreur.
Avez-vous une idée?
char choix_chara(int niv_gris_moy, int max, int min,charactere* tableau,int taille_tableau){
double k=signature_pixel_2(niv_gris_moy,max,min);
liste l= vide;
int i;
double acc=1;
int min2=plus_petit_tab(tableau,taille_tableau);
int max2=plus_grand_tab(tableau,taille_tableau);
for (i=0;i<94;i++){
double k2=signature_charascii_2((tableau[i]->nv_gris),max2,min2);
if(acc< abs(k2-k)){
acc=abs(k2-k);
l=vide;
cons(i,l);
}
else if(acc==abs(k2-k)){
cons(i,l);
}
}
int e=choix(l);
return tableau[e]->lettre_ascii;
}
}
int take_from_liste(int k,liste l){
if (k>longueur_liste(l)){printf("erreur");exit(1);}
else if (k==0){return(l->head);}
else{return (take_from_liste(k-1,l->tail));}
}
int choix( liste l){
int i=longueur_liste(l);
int k = (rand()% i) ;
int j=take_from_liste(k,l);
return j;
}
A voir également:
- Exception en point flottant (core dumped)
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
4 réponses
Autre remarque : quand ta liste est vide, int k = (rand()% i) ; fait une division par zéro.
Ce n'est pas a priori une erreur de virgule flottante, mais ça peut sûrement te faire planter.
Ce n'est pas a priori une erreur de virgule flottante, mais ça peut sûrement te faire planter.
Ton erreur signifie que tu va dans un espace mémoire qui ne t'appartient pas.
tu as cibler ton problème, il vient de choix. Il est possible que ta liste soit mal définie ou que la longueur qu'elle retourne soit fausse.
tu as cibler ton problème, il vient de choix. Il est possible que ta liste soit mal définie ou que la longueur qu'elle retourne soit fausse.
je suis sûr de ces fonctions vu que je les ai déja testées... et en fait, choix fonctionne aussi lorsque je l'utilise seul... j'ai passé du temps sur la question et je n'ai pas trouvédonc je ne pense pas que ce soit aussi "trivial", à moins qu'il me faille des lunettes =)
ps: malgré le changement de pseudo je suis bien l'auteur du sujet
ps: malgré le changement de pseudo je suis bien l'auteur du sujet
Bonjour
Ce qui m'intrique, c'est qu'il s'agisse d'une erreur de virgule flottante, alors qu'il n'est pas question de virgule flottante dans choix ni dans la fin de la fonction choix_chara qui appelle choix.
Tu n'as pas moyen de détecter quelle est vraiment la ligne qui provoque l'erreur ?
En mettant quelques "printf ('coucou')" pour voir où tu passes et où tu ne passes plus.
Ce qui m'intrique, c'est qu'il s'agisse d'une erreur de virgule flottante, alors qu'il n'est pas question de virgule flottante dans choix ni dans la fin de la fonction choix_chara qui appelle choix.
Tu n'as pas moyen de détecter quelle est vraiment la ligne qui provoque l'erreur ?
En mettant quelques "printf ('coucou')" pour voir où tu passes et où tu ne passes plus.
Le debugueur c'est tout de même plus efficace !
Honte à moi, tu as raison à 200%, évidemment...
Je prends de mauvaise habitudes avec le PHP (bien qu'il existe des possibilités de débogage aussi paraît-il, mais je ne me suis jamais penché dessus)
exception en point flottant Je me suis permis de supposer que c'était une (mauvaise) traduction de floating point exception, qui signifie en principe un problème de calcul en virgule flottante. Mais les messages d'erreur ne correspondent pas toujours à la réalité.
Honte à moi, tu as raison à 200%, évidemment...
Je prends de mauvaise habitudes avec le PHP (bien qu'il existe des possibilités de débogage aussi paraît-il, mais je ne me suis jamais penché dessus)
exception en point flottant Je me suis permis de supposer que c'était une (mauvaise) traduction de floating point exception, qui signifie en principe un problème de calcul en virgule flottante. Mais les messages d'erreur ne correspondent pas toujours à la réalité.
Dans la division au sens habituel, on s'intéresse au quotient.
Dans le modulo, on s'intéresse au reste.
Mais c'est fondamentalement la même opération, et prendre un modulo 0 est mathématiquement aussi absurde que de diviser par 0