Qu'est ce qu' un segmentation faults

Résolu
sofi -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'ai une bug lors l'execution de mon programme <segmentation faults>
comment je peux enlever cette bug et qu'est ce que ce là veux dire??


3 réponses

Utilisateur anonyme
 
Bonjour,
https://fr.wikipedia.org/wiki/Erreur_de_segmentation
travail en dehors de la zone mémoire allouée, mauvais adressage, débordement en écriture, tableau mal indexé ou autres, c'est pas les possibilités qui manquent.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Une erreur de segmentation survient quand un programme essaie d'accéder à une adresse mémoire qui ne lui est pas allouée.

Typiquement, dans ton programme, il y a de fortes chances qu'il y ait une erreur d'utilisation d'un pointeur...

Xavier
0
sofi
 
si j'ai par exemple char* tableau[5];
est ce que je peux acceder à chaque caractére de ce tableau :
tableau [i] [j]
cette écriture est elle vraie?!!
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
À condition que i soit entre 0 et 4, et que tableau[i] ait été suffisamment alloué en mémoire (taille>=j)
0
sofi
 
d'accord
0
sofi
 
est ce que c'est obligatoire de faire un eallocation dans la mémoire d'un tableau de char* avec la fonction malloc ou bien c'est suffisant de déclarer de l'initialiser (c'est à dire que lorsque je l'initalise il est stoqué dans la mémoire)
0
sofi
 
car dans mon code j'ai initialisé ma chaine et puis lorsque j'ai fais par exemple
cahr* tableau[5];
tableau[0]="Salut";
streln(tableau[0]) il me donne pas la vraie réponse
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il te donne la bonne réponse car il est gentil (l'espace que tu utilises est bien celui de ton programme) mais en faisant comme ça tu peux également utiliser de l'espace qui n'appartient pas à ton programme, ce qui te donnera une segmentation fault !

Donc oui, c'est obligatoire de faire de l'allocation mémoire, pour tous les pointeurs.

Une manière simple de le faire est de borner la taille de tes char* en construisant un double tableau, l'allocation sera donc faite sans avoir à utiliser explicitement le malloc.

char tableau[5][BUFSIZ];
0