[C] Problème d'erreur de segmentation
o00gourou00o
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Mahmah Messages postés 496 Date d'inscription Statut Membre Dernière intervention -
Mahmah Messages postés 496 Date d'inscription Statut Membre Dernière intervention -
B'jour les gens!
Voilà voilà, je programme un p'tit peu en C et je suis face à une erreur de segmentation qui refuse de se casser... J'ai jeté un oeil aux autres messages sur le sujet mais j'ai pas trouvé mon bonheur et ça marche toujours pas!
Le but est de lire un fichier dans lequel se trouve sous forme de texte un niveau pour un labyrinthe et de le mettre dans un tableau pour pouvoir l'utiliser...
Voici mon code:
Si vous pouviez me filer un petit coup de main ce serait sympa ^^ (y'a rien à faire les mallocs ont toujours été une source d'embrouilles pour moi)
Merci d'avance pour vos réponses!
Voilà voilà, je programme un p'tit peu en C et je suis face à une erreur de segmentation qui refuse de se casser... J'ai jeté un oeil aux autres messages sur le sujet mais j'ai pas trouvé mon bonheur et ça marche toujours pas!
Le but est de lire un fichier dans lequel se trouve sous forme de texte un niveau pour un labyrinthe et de le mettre dans un tableau pour pouvoir l'utiliser...
Voici mon code:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <unistd.h> #include <fcntl.h> #define max 128 #define taille 128 //Voilà une fonction qui prend en paramètre un fichier et un tableau de chaînes de caractères et qui copie toutes les lignes du fichier dans le tableau. char **FichierDansTableau (char *fichier, char *tableau[]) { char buf[1], tmp[1024]; int a=0; int b=0; int i, j, file1; //On alloue de la memoire pour le tableau, assez pour 128 lignes et 128 colonnes, pour l'instant. tableau = (char **)malloc(sizeof(char)*taille); for (i=0; i<taille; i++) { tableau[i]=(char *)malloc(sizeof(char)*max); } strcpy(tmp, ""); //On ouvre le fichier qui contient les informations if ((file1=open(fichier, O_RDONLY))<0) { printf("Erreur lors de l'ouverture du fichier %s\n",fichier); exit(0); } //Et voila la boucle qui sert a placer le texte dans le tableau: tant que le fichier n'a pas atteint sa fin (EOF), si le caractere lu n'est pas un saut de ligne, on le recopie a la suite de la ligne temporaire. //Si le caractere est un saut de ligne, on verifie si on a pas atteint le maximum de lignes du tableau (a savoir 128). Si c'est le cas on realloue de la memoire pour 128 autres lignes de 128 caracteres. //Une fois qu'on est assure d'avoir de la memoire, on recopie la ligne temporaire dans le tableau, on la vide et on retourne a la premiere colonne. //Une fois sorti de la boucle, on met NULL a la fin du tableau. while (read(file1, buf, 1)>0) { if (buf[0]!='\n') { tmp[b]=buf[0]; b++; } else { strncpy(tableau[a], tmp, b); strcpy(tmp,""); b=0; a++; } } tableau[a]=NULL; close(file1); return tableau; } int main(void) { char **tableau; int i, j; //On place le contenu de "lvl1.txt" dans un tableau de chaînes de caractères tableau = FichierDansTableau ("lvl1.txt", tableau); //Et on affiche le tableau histoire de tester... for (i=0; i<128; i++) { for (j=0; j<128; j++) { printf("%c", tableau[i][j]); } } return 0; }
Si vous pouviez me filer un petit coup de main ce serait sympa ^^ (y'a rien à faire les mallocs ont toujours été une source d'embrouilles pour moi)
Merci d'avance pour vos réponses!
A voir également:
- [C] Problème d'erreur de segmentation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
- Comment recuperer whatsapp supprimé par erreur - Guide
3 réponses
Salutations,
Seg Fault c'est la délicate manière qu'a linux pour te prévenir que tu as déconné avec sa mémoire.
Je n'ai pas pu tester vraiment ton programme puisqu'il n'est pas en C standard et moi sous Windows. : /
Ceci dit, l'initialisation est boiteuse.
tableau = (char **) malloc( sizeof( char ) * taille );
Le cast semble vouloir dire que le malloc est une zone mémoire destinée à contenir des char *. Le sizeof n'a pas l'air du même avis.
Je dirais bien que les conditions sont ici réunies pour faire un bon seg fault.
M.
Hmmm ? Bizarre, je n'ai pas vu les frees correspondants aux mallocs.
Seg Fault c'est la délicate manière qu'a linux pour te prévenir que tu as déconné avec sa mémoire.
Je n'ai pas pu tester vraiment ton programme puisqu'il n'est pas en C standard et moi sous Windows. : /
Ceci dit, l'initialisation est boiteuse.
tableau = (char **) malloc( sizeof( char ) * taille );
Le cast semble vouloir dire que le malloc est une zone mémoire destinée à contenir des char *. Le sizeof n'a pas l'air du même avis.
Je dirais bien que les conditions sont ici réunies pour faire un bon seg fault.
M.
Hmmm ? Bizarre, je n'ai pas vu les frees correspondants aux mallocs.
:-(
Merci !
M.