Problème lors du remplissage d'un tableau alloué dynamiquement
Bonjour :)
Dans le cadre d'un petit jeu 2d que j'aimerais faire histoire de me remttre dans le bain de la prog, j'ai envie de créer un code qui :
-Ouvre un fichier.txt
-Lit les deux premières lignes du fichiers, qui servent à assigner le nombre de lignes et de colonnes qui serviront dans le niveau
-Alloue ensuite dynamiquement une "matrice"
-Remplie la matrice Matrice[i][j][l] = '0'
->C'est à cet endroit que cela pose problème : Mon programme se compile, mais dès qu'il s'allume, il coupe automatiquement...
Ca doit être une erreur du débutant toute bête, mais je n'arrive pas à la déceler :(
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #include <stdio.h>
#include <stdlib.h>
#define TAILLE_MAX 100
int main(int argc, char *argv[])
{
/* Déclaration des variables */
FILE* fichier = NULL; //On déclare le fichier
char chaine_temp[TAILLE_MAX] = "" ;
char carac_temp = '0' ;
//Initialisateur de boucles
int i = 0;
int j = 0;
int l = 0;
//Taille du niveau
int NbColonnes = 0;
int NbLignes = 0;
//Matrice du niveau
char*** Matrice = {NULL} ;
fichier = fopen("fichier.txt", "r+"); //On ouvre le fichier
//Test de l'ouverture du fichier
if(!fichier != NULL)
{
printf("erreur lors de l'ouverture du fichier !\n");
system("PAUSE");
return 1 ;
}
//On lit les deux premières lignes, puis on les écrits dans des variables
for(i=0; i<2; i++)
{
fgets(chaine_temp, TAILLE_MAX, fichier);
if(i == 0)
{
sscanf(chaine_temp, "%d", &NbColonnes);
}
if(i == 1)
{
sscanf(chaine_temp, "%d", &NbLignes);
}
}
//On alloue dynamiquement le niveau
Matrice = malloc(NbColonnes * sizeof(char));
for(i=0; i<NbColonnes; i++)
{
Matrice[i] = malloc(NbLignes * sizeof(char));
}
for(i=0; i<NbColonnes; i++)
{
for(j=0; j<NbLignes; j++)
{
Matrice[i][j] = malloc(3 * sizeof(char));
}
}
//On entre ensuite chaque valeur du fichier texte dans la Matrice
for(j=0; j<NbLignes; j++)
{
for(i=0; i<NbColonnes; i++)
{
carac_temp = fgetc(fichier);
if(carac_temp != ' ') //Si le caractère n'est pas un espace
{
for(l=0; l<3; l++)
{
//Alors on entre les 3 caractères dans le tableau
Matrice[i][j][l] = carac_temp ;
}
}
}
}
//Vérification : on affiche le tableau !
for(i=0; i<NbColonnes; i++)
{
for(j=0; j<NbLignes; j++)
{
for(l=0; l<3; l++)
{
printf("%c", Matrice[i][j][l]);
}
}
}
//On ferme le fichier
fclose(fichier);
system("PAUSE");
return 0;
} |
Voici ensuite la partie qui pose problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| //On entre ensuite chaque valeur du fichier texte dans la Matrice
for(j=0; j<NbLignes; j++)
{
for(i=0; i<NbColonnes; i++)
{
carac_temp = fgetc(fichier);
if(carac_temp != ' ') //Si le caractère n'est pas un espace
{
for(l=0; l<3; l++)
{
//Alors on entre les 3 caractères dans le tableau
Matrice[i][j][l] = carac_temp ;
}
}
}
} |
Et enfin le fichier texte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| 10
8
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000 |
Je suis prêt à donner plus de renseignement.
Merci de votre aide :)