Salut j'ai un gros problème; j'ai une fonction qui bug et je ne peux pas savoir quel est le problème car lorsque je lance le programme en mode debug ça marche sans problème, ça m'est déjà arrivé il y un bout de temps et je voudrais savoir pourquoi ça se passe comme ça, comment y remédier et j'aimerais bien aussi qu'on m'aide avec cette fonction

La fonction génère une variable contenant les données d'une map (constituée de plusieurs plans).

Voici la variable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
typedef struct TMAP
{
    int w, h,//Largeur et hauteur de la map (en nombre de tiles)
    tw, th,//Largeur et hauteur de chaque tile
    plannb;//Nombre de plans
    **tilesinfos,//Informations sur chaque tile (tangible ou pas, etc ...)
    ***map,//Matrice de tiles(map[plan numéro i][xème tile en partant de lagauche][yème plan partant du haut]
    loadinfo;//Information sur le chargement (si le pointeur sur fichier ou surface égal NULL)
    SDL_Surface **tileset;//Les tilesets (tileset[plan numéro i])
}TMAP;
Les données sont contenues dans des fichiers :
Un fichier "datas" qui contient la largeur et la hauteur en nombre de tiles de la map, la largeur et la hauteur des tiles ainsi que le nombre de plans de la map
Un fichier _%dxd (%d est le numéro du plan) qui contient le nombre de tiles différents constituant le plan, leurs données (qui ne sont qu'un nombre 8 bits) et la couleur transparente
Un fichier _%dxt (%d est le numéro du plan) qui n'est rien d'autre que le tileset du plan


Et voici la fonction qui la charge :

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
TMAP loadtiledmap (const char *mapname)
{
    TMAP map;
    char adress [200];
    int tilenb = 0, i, j, plani;
    Uint32 alpha;
    FILE *file=NULL;
 
    map.loadinfo = 0;
 
//--------------------Fichier primaire("data")
    sprintf (adress, "maps/%s/datas", mapname);
    file = fopen (adress, "r");
    if (!file)
    {
        map.loadinfo = -1;//Code d'échec de chargement de fichier primaire
        return map;
    };
 
    fscanf (file, "%dx%dx%dx%dx%d\n", &map.w, &map.h,
            &map.tw, &map.th, &map.plannb);/*Données primaires : largeur et hauteur de la map en nombre de tiles, largeur et hauteur des tiles et nombre de plans*/
 
    map.map = (char***)malloc (map.plannb*sizeof (char**))/*Allocation d'autant de matrices de tiles que de plans*/
    map.tileset = (SDL_Surface**)malloc (map.plannb*sizeof (SDL_Surface*));/*Allocation d'autant de tilesets que de plans*/
    map.tilesinfos = (char**)malloc (map.plannb*sizeof (char*));/*Allocation d'autant de tableaux d'informations sur les tiles que de plans*/
 
    fclose (file);
//---------------------Fichier de plans
 
    for (plani = 0; plani < map.plannb; plani++)//Boucle for pour charger les données de chaque plan
    {
        sprintf (adress, "maps/%s/_%dxd", mapname, plani);//Adresse du plan
        file=fopen (adress, "r");//Ouverture du fihier de plan i
        if (!file)
        {
            map.loadinfo = -2;//Code d'échec de chargement de fichier de plan
            return map;
        };
        fscanf (file, "+%d+%d\n", &tilenb, &alpha);//Nombre de tiles + canal alpha du plan
        map.tilesinfos [plani] = (char*)malloc (tilenb);//Allocation des infos des tiles
        for (i=0;i<tilenb;i++)fscanf (file,"%d,", (int*)&map.tilesinfos[plani][i]);/*Chargement des infos de tiles*/
        fscanf (file, "\n");//Retour à la ligne
 
        map.map [plani] = (char**)malloc (map.w*sizeof (char*));//Allocation du nombre tiles en largeur
        for (i=0;i<map.w;i++)map.map[plani][i]=(char*)malloc (map.h);//Allocation du nombre tiles en hauteur
        for (j=0; j<map.h;j++)
        {
            for (i=0;i<map.w;i++)
            {
                fscanf (file, "%d.", (int*)&map.map [plani][i][j]);//Lecture du tile de coordonnée {i;j}
            };
            fscanf (file, "\n");//retour à la ligne après la ligne de tiles
        };
        fclose (file);
 
56     sprintf (adress, "maps/%s/_%dxt", mapname, plani);//Adresse du tileset
57
58     map.tileset [plani] = SDL_LoadBMP (adress);//Chargement du tileset
59     if (!map.tileset [plani])
60     {
61         map.loadinfo = -3;//Code d'echec du chargement du tileset
62         return map;
63     };
64     SDL_SetColorKey (map.tileset [plani], SDL_SRCCOLORKEY, alpha);//Application de la transparence
    };
    return map;
};
(Ca bloque autour des lignes 56~64)

Et enfin les fichiers à charger :

Fichier datas
30x30x32x32x1
Fichier _0xd
+3+0
0,0,0,
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
Les fichiers n'ont pas de problème.
Le bug de chargement survient à partir de 30 tiles de hauteur et/ou de largeur.

Merci !