Pourquoi GCC ne signale pas d'avertisment

rabah200830 -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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