Pourquoi GCC ne signale pas d'avertisment

Fermé
rabah200830 - Modifié par rabah200830 le 11/05/2013 à 21:04
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 11 mai 2013 à 21:55
Bonsoir
Voila j'ai passé plus de cinq heures à rechercher l'origine de l'erreur de segmentation dans mon programme et à la fin voila l'erreur :

//fonction getPos dans prog.h 

if(c >= 'a' && c <= 'Z'); //l'origine de l'erreur point virgule après le if 
return (int) (c-'a');  
return -1; 
//et après dans une autre fonction dans prog.c : 

int pos = getPos(c); 
if(pos == -1) return NULL; 
return tab[pos]; //erreur de segmentation  


Le problème que lorsque je lance le programme avec le débogueur tout marche bien et j'ai essayé sur Linux et ça marche avec et sans gdb. Sur un autre PC (sur Ubunutu ) ça marche qu'avec gdb.

Quelqu'un peut m'expliquer tous ça. Si sans le débogueur il y a une instruction tab[-90] alors normalement elle y est avec le débogueur et pourquoi sur mon linux ça marche sans et avec le débogueur.

Et le plus important pourquoi gcc n'a pas signalé un avertissement malgré le -Wall.

J'espère que quelqu'un pourra m'éclairer sur ça et merci d'avance.

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
11 mai 2013 à 21:55
Bonjour,

C'est le propre de l'erreur de segmentation. Ce n'est pas signalé à la compilation (ou alors à cause d'une autre cause) car syntaxiquement, il n'y a rien à dire. En revanche, cela provoque un comportement indéfini à la compilation. Dit autrement, un coup ça passera, un coup ça passera pas.
0