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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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