Ce programme "a cessé de fonctionner" + status 255
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:
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:
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:
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:
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 :oops: .
Merci d'avance pour vos réponses ! :mrgreen: