Amis internautes, bonjour !

J'ai voulu coder une fonction qui ouvre un fichier en mode texte, et qui charge son contenu dans une structure. Voilà 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
int LoadMap(const char lNumber, LevelData* ldat) {
 
    char lvl[4];
    int buf;
    sprintf(lvl, "lvl%c", lNumber);
 
    FILE *lvlFile = NULL;
    if ((lvlFile = fopen(lvl,"r")) == NULL) {
        fprintf(stderr, "Can't open %s", lvl);
        exit(EXIT_FAILURE);
    }
 
    int i, j;
    ldat->lW = GETN; // GETN défini pour fgetc(lvlFile) - '0'
    buf = GETN; // Jumping \n character
 
    ldat->lH = GETN;
 
    ldat->map = malloc(ldat->lW * sizeof(int*));
    for (i = 0; i < ldat->lH; i++)
        ldat->map[i] = malloc(ldat->lH * sizeof(int));
    if (ldat->map == NULL)   {
        fprintf(stderr, "Can't allocate");
        exit(EXIT_FAILURE);
    }
 
    for (i = 0; i < ldat->lH; i++)    {
        buf = GETN;
        for (j = 0; j < ldat->lW; j++)    {
            ldat->map[i][j] = GETN;
            if (ldat->map[i][j] == 2)   {
                ldat->pPosInTabX = j;
                ldat->pPosInTabY = i;
            }
            fprintf(stdout, "%d", ldat->map[i][j]);
        }
        fprintf(stdout, "\n");
    }
    fprintf(stdout, "Player Position: %d;%d\n", ldat->pPosInTabX, ldat->pPosInTabY);
    fclose(lvlFile);
    return 0;
}
.
La structure LevelData est définie comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
typedef struct  {
    int **map;                  // Quite self explanatory
    int lW, lH;                 // Level Width and Heigh in tiles
    SDL_Rect xyTile;            // Tile size (square)
    SDL_Rect xyPlayer;          // Player size (square)
    SDL_Rect xyOrigin;          // Place on the screen where the mapping will begin
    int pPosInTabX, pPosInTabY; // Player position in map tab
    int beautySpace;            // Space between two tiles
} LevelData;
et est déclarée dans le main comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
LevelData *ldat = NULL;
    if ((ldat = malloc(sizeof(ldat))) == NULL)
        fprintf(stderr, "Can't allocate LevelData Structure");
Toujours dans le main, j'appelle la fonction "LoadMap('1', ldat);".

Sauf que... Le compilo (codeblocks + mingw) m'envoie soit Process terminated with status 255 soit Process terminated with status XXXXXXXXXX.
Et windows s'affole et m'affiche prog.exe a cessé de fonctionner.
(En fait ce problème apparait à la fin du programme, mais c'est après la création de cette fonction que ça a commencé à planter, donc je vais vous épargner le reste du code).

Tandis que le compilo m'envoie pas d'erreurs, mais un warning, pour la fonction LoadMap : variable 'buf' set but not used. Etrange, non ?

Et encore plus étrange, le debugger intégré à codeblocks n'arrive pas à me trouver l'erreur: le programme se déroule du début jusqu'à la fin, puis quand ça plante il m'affiche sur le stack des entrées vides et des fonctions système (la liste :
Code none : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
#0 00000004     ?? () (??:??)
#1 74D73EB1     UxTheme!GetThemeFilename() (C:\Windows\SysWOW64\uxtheme.dll:??)
#2 74D73E27     UxTheme!GetThemeFilename() (C:\Windows\SysWOW64\uxtheme.dll:??)
#3 77DE481E     ?? () (??:??)
#4 77DE486B     ?? () (??:??)
#5 77DF0A38     ?? () (??:??)
#6 77DF091D     ?? () (??:??)
#7 76C239BE     KERNEL32!GetCurrentApplicationUserModelId() (C:\Windows\SysWOW64\kernel32.dll:??)
#8 ??   ?? () (??:??)
).

Et quand je passe le programme au désassembleur (ollydbg), ce dernier m'envoie un truc du genre impossible de lire à l'adresse 0x00000002 (permission refusée), et ça à chaque fois.

Depuis 8 heures ce matin je n'arrive pas à trouver la couille, par pitié aidez moi .

Merci d'avance pour vos réponses !