Qu'est ce qu' un segmentation faults

Résolu
sofi -  
KX Messages postés 19031 Statut Modérateur -
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

  1. Reivax962 Messages postés 3742 Statut Membre 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
  2. 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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      À condition que i soit entre 0 et 4, et que tableau[i] ait été suffisamment alloué en mémoire (taille>=j)
      0
    2. sofi
       
      d'accord
      0
    3. 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
    4. 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
    5. KX Messages postés 19031 Statut Modérateur 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