IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Malloc ou erreur incompréhensible


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut Malloc ou erreur incompréhensible
    Bonjour,
    il m'est arrivé une chose assez étrange, j'ai codé un début de bomberman (pas joli à voir mais ça marché), il marché , je n'ai "normalement" pas touché au code et pourtant hier soir, veille du jour échéant, impossible de lancer le mode jeu

    code utile:

    header.h :
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    /*
    Header.h
    -----
    	Par Van Nevel
    			Mathieu
     
    */
     
     
    #ifndef DEF_HEADER
    #define DEF_HEADER
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <FMOD/fmod.h>
     
     
     
     
    /* Define de la fenêtre
    */
        #define WIDTH_TILE		51
    	#define HEIGHT_TILE		51
        #define WINDOWS_WIDTH		1000
        #define WINDOWS_HEIGHT		800
    	#define WINDOWS_BPP		   32
     
    	typedef enum {false,true} bool;
    	typedef enum{WHITE,RED,BLUE,GREEN,OR} Color;
        typedef  enum {UP, DOWN, LEFT, RIGHT}Direct;
    	typedef enum {SOL,WALL,INDESTRUC_WALL}elements;
    	typedef enum{VIDE,PLAYER,MONSTER_1,MONSTER_2,MONSTER_3,MONSTER_4,BOSS,BOMBE,FIRE} sprit;
     
     
    	//Carte et Event
    	typedef struct TypeCase{
    	SDL_Rect box;
    	bool isDestructible;
    	bool isPassable;
    	bool limitBombe;
    	bool destruction;
    	SDL_Rect positionTileSet;
    	} TypeCas;
    	typedef TypeCas *TypeCase;
     
    	typedef struct
    {
    	char key[SDLK_LAST];
    	int mousex,mousey;
    	int mousexrel,mouseyrel;
    	char mousebuttons[8];
        char quit;
    } Input;
     
    	//Sprites
    	typedef struct b{
    	SDL_Rect positionBombe;
    	SDL_Rect positionCharset;
    	SDL_Rect box;
    	bool Sound;
    	int ticksBombe, etapeBombe, timerBombe;		
    	struct b *suiv;
    	}Bomb;
    	typedef Bomb* Bombe;
     
    	typedef struct {
    		int life;
    		Direct direction;
    		SDL_Rect box,positionPlayer;
    		Bombe Bombe;
    		Color Type;
    		int BombeUp;
    		int BombeBag;
    		int SpeedUp;
    		int Repulse;
    		bool Damage,Reaction;
    		SDL_Rect positionCharset;
    	}player;
    	typedef player *Player;
     
    	typedef struct{
    		int life,range,timerMove;
    		Direct direction;
    		SDL_Rect box;
    		SDL_Rect positionMonster;
    		bool Damage;
    		SDL_Rect positionCharset;
    	}monster;
    	typedef monster *Monster;
     
    	typedef struct{
    		Player Players;
    		Monster Monsters;
    		Bombe Bombe;
    	}Sprite;
     
     
    typedef struct
    {
    	int nbTiles;
    	int nbChar;
     
    	TypeCase *TypeCase;	//first layer
    	elements **map;
    	Sprite *TypeSprites;	//second layer
    	sprit **sprites;
     
     
    	SDL_Surface **CharSet;
    	SDL_Surface *TileSet;
    	int nbTiles_width_world, nbTiles_height_world;
    	int xscroll,yscroll;
    	int width_screen_game,height_screen_game;
    } Screen;
     
    #include "Screen.h"
    #include "Animations.h"
    #include "Create_Map.h"
    #include "Time.h"
    #include "Game.h"
    #include "Bombes.h"
    #include "Collisions.h"
    #include "Moves.h"
     
    Screen* GameScreen;
    animator playerMove[4];
    #endif
    game.c :
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
     
    /*
    Game.c
    -----
    	Par Van Nevel
    			Mathieu
     
    		Fichier Principal du mode Aventure
     
    */
     
    #include "Header.h"
     
    /* Methode principale
    */
     
     
     
     
     
    void AventureMode(SDL_Surface *screen,FMOD_SYSTEM *systeme)
    {
     
    	int timerJeu=SDL_GetTicks(), timerAnim=SDL_GetTicks(),i,j;
    	bool LevelInProgress=true;
    	Input in;
    	Player player;
    	FMOD_SOUND *musique_jeu = NULL;
    	FMOD_RESULT resultat_accueil;
     
    	animation playermove[4];
    	Direct direction=DOWN;
    	char Default[10]={0};
     
    	FMOD_System_CreateSound(systeme, "musique_jeu.mp3",  FMOD_CREATESAMPLE|  FMOD_LOOP_NORMAL, 0, &musique_jeu);
    	FMOD_System_PlaySound(systeme, FMOD_CHANNEL_FREE, musique_jeu, 0, NULL);
    	FMOD_Sound_SetLoopCount(musique_jeu, 15);
     
     
    	GameScreen=(Screen*)malloc(sizeof(Screen));
     
     
     
             //initialisation manuel pour test
    	GameScreen->nbTiles=3;
    	GameScreen->nbChar=2;
    	GameScreen->nbTiles_height_world=50;
    	GameScreen->nbTiles_width_world=50;
    	GameScreen->height_screen_game=20*51;
    	GameScreen->width_screen_game=20*51;
    	GameScreen->xscroll=0;
    	GameScreen->yscroll=0;
     
    	GameScreen->CharSet=(SDL_Surface**)malloc(4*sizeof(SDL_Surface*));
     
    	for(i=0;i<4;i++)
    		GameScreen->CharSet[i]=(SDL_Surface*)malloc(sizeof(SDL_Surface));
     
    	GameScreen->CharSet[0]=IMG_Load("images/CharSet_Bomberman.png");
    	GameScreen->CharSet[1]=IMG_Load("images/bombe.png");
    	GameScreen->CharSet[2]=IMG_Load("images/CharSet 01.bmp");
    	GameScreen->CharSet[3]=IMG_Load("images/explosBombe.png");
    	GameScreen->TileSet=IMG_Load("images/TileSet1.bmp");
     
     
    	GameScreen->TypeSprites=(Sprite*)malloc(GameScreen->nbChar*sizeof(Sprite));
     
    	GameScreen->TypeSprites[PLAYER].Players=(Player)malloc(sizeof(player));
     
    	GameScreen->TypeSprites[PLAYER].Players->box.x=12*WIDTH_TILE;
    	GameScreen->TypeSprites[PLAYER].Players->box.y=12*HEIGHT_TILE;
    	GameScreen->TypeSprites[PLAYER].Players->box.w=30;
    	GameScreen->TypeSprites[PLAYER].Players->box.h=30;
    	GameScreen->TypeSprites[PLAYER].Players->positionPlayer.x=GameScreen->TypeSprites[PLAYER].Players->box.x-10;
    	GameScreen->TypeSprites[PLAYER].Players->positionPlayer.y=GameScreen->TypeSprites[PLAYER].Players->box.y-56;
    	GameScreen->TypeSprites[PLAYER].Players->life=1;
    	GameScreen->TypeSprites[PLAYER].Players->positionCharset.x=0;
    	GameScreen->TypeSprites[PLAYER].Players->positionCharset.y=0;
    	GameScreen->TypeSprites[PLAYER].Players->positionCharset.w=49;
    	GameScreen->TypeSprites[PLAYER].Players->positionCharset.h=86;
    	GameScreen->TypeSprites[PLAYER].Players->direction=DOWN;
     
     
    	GameScreen->TypeSprites[MONSTER_1].Monsters=(Monster)malloc(sizeof(monster));
     
    	GameScreen->TypeSprites[MONSTER_1].Monsters->box.x=10*WIDTH_TILE;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->box.y=5*HEIGHT_TILE;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->box.w=30;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->box.h=30;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->positionMonster.x=GameScreen->TypeSprites[MONSTER_1].Monsters->box.x-10;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->positionMonster.y=GameScreen->TypeSprites[MONSTER_1].Monsters->box.y-56;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->life=1;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->positionCharset.x=0;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->positionCharset.y=0;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->positionCharset.w=49;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->positionCharset.h=86;
    	GameScreen->TypeSprites[MONSTER_1].Monsters->timerMove=0;
     
    	GameScreen->TypeSprites[MONSTER_2].Monsters=(Monster)malloc(sizeof(monster));
     
    	GameScreen->TypeSprites[MONSTER_2].Monsters->box.x=4*WIDTH_TILE;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->box.y=8*HEIGHT_TILE;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->box.w=30;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->box.h=30;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->positionMonster.x=GameScreen->TypeSprites[MONSTER_1].Monsters->box.x-10;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->positionMonster.y=GameScreen->TypeSprites[MONSTER_1].Monsters->box.y-56;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->life=1;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->positionCharset.x=0;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->positionCharset.y=0;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->positionCharset.w=49;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->positionCharset.h=86;
    	GameScreen->TypeSprites[MONSTER_2].Monsters->timerMove=0;
     
    		GameScreen->map=(elements**)malloc(GameScreen->nbTiles_height_world*sizeof(elements*));
    		GameScreen->sprites=(sprit**)malloc(GameScreen->nbTiles_height_world*sizeof(sprit*));
     
    	for( i=0; i<GameScreen->nbTiles_height_world;i++){
    		GameScreen->map[i]=(elements*)malloc(GameScreen->nbTiles_width_world*sizeof(elements));
    		GameScreen->sprites[i]=(sprit*)malloc(GameScreen->nbTiles_width_world*sizeof(sprit));
     
    		for( j=0; j<GameScreen->nbTiles_width_world; j++){
    			GameScreen->map[i][j]=SOL;
    			GameScreen->sprites[i][j]=VIDE;
    		}}
     
     
    	GameScreen->map[5][5]=WALL;
    	GameScreen->map[7][7]=INDESTRUC_WALL;
    	GameScreen->map[10][10]=WALL;
    	GameScreen->map[6][6]=WALL;
     
    	for(i=0;i<GameScreen->nbTiles_width_world;i++){
    		GameScreen->map[0][i]=INDESTRUC_WALL;
    		GameScreen->map[GameScreen->nbTiles_height_world-1][i]=INDESTRUC_WALL;
    	}
     
    	for(i=0;i<GameScreen->nbTiles_height_world;i++){
    		GameScreen->map[i][0]=INDESTRUC_WALL;
    		GameScreen->map[i][GameScreen->nbTiles_width_world-1]=INDESTRUC_WALL;
    	}
     
    	GameScreen->TypeCase=(TypeCase*)malloc((GameScreen->nbTiles)*sizeof(TypeCas));
     
     
    	GameScreen->TypeCase[SOL]->positionTileSet.x=0;
    	GameScreen->TypeCase[SOL]->positionTileSet.y=0;
    	GameScreen->TypeCase[SOL]->positionTileSet.w=51;
    	GameScreen->TypeCase[SOL]->positionTileSet.h=51;
    	GameScreen->TypeCase[WALL]->positionTileSet.x=51;
    	GameScreen->TypeCase[WALL]->positionTileSet.y=0;
    	GameScreen->TypeCase[WALL]->positionTileSet.w=51;
    	GameScreen->TypeCase[WALL]->positionTileSet.h=51;
    	GameScreen->TypeCase[WALL]->isPassable=false;
    	GameScreen->TypeCase[WALL]->box.w=51;
    	GameScreen->TypeCase[WALL]->box.h=51;
    	GameScreen->TypeCase[WALL]->limitBombe=true;
    	GameScreen->TypeCase[WALL]->isDestructible=true;
    	GameScreen->TypeCase[WALL]->destruction=false;
    	GameScreen->TypeCase[INDESTRUC_WALL]->positionTileSet.x=102;
    	GameScreen->TypeCase[INDESTRUC_WALL]->positionTileSet.y=0;
    	GameScreen->TypeCase[INDESTRUC_WALL]->positionTileSet.w=51;
    	GameScreen->TypeCase[INDESTRUC_WALL]->positionTileSet.h=51;
    	GameScreen->TypeCase[INDESTRUC_WALL]->isPassable=false;
    	GameScreen->TypeCase[INDESTRUC_WALL]->box.w=51;
    	GameScreen->TypeCase[INDESTRUC_WALL]->box.h=51;
    	GameScreen->TypeCase[INDESTRUC_WALL]->limitBombe=true;
    	GameScreen->TypeCase[INDESTRUC_WALL]->isDestructible=false;
    	GameScreen->TypeCase[INDESTRUC_WALL]->destruction=false;
     
    	GameScreen->TypeSprites[PLAYER].Players->BombeBag=10;
    	GameScreen->TypeSprites[PLAYER].Players->BombeUp=3;
    	GameScreen->TypeSprites[PLAYER].Players->Type=WHITE;
    	GameScreen->TypeSprites[PLAYER].Players->Bombe=NULL;
     
    	SDL_SetColorKey(GameScreen->CharSet[2], SDL_SRCCOLORKEY, SDL_MapRGB(GameScreen->CharSet[2]->format, 0, 255, 0));
     
     
     
     
    			//initialisation mouvement
    	playermove[0]=loadAnim(Default,"playerUp.bin");
    	playermove[1]=loadAnim(Default,"playerDown.bin");
    	playermove[2]=loadAnim(Default,"playerLeft.bin");
    	playermove[3]=loadAnim(Default,"playerRight.bin");
     
    	for(i=0;i<4;i++){
    	animator_init(&playerMove[i],&playermove[i]);
    		for(j=0;j<3;j++){
    	playerMove[i].anim->frames[j].image.w=49;
    	playerMove[i].anim->frames[j].image.h=86;
    	playerMove[i].anim->frames[j].delay=3;
    		}
    	}
     
    	player=GameScreen->TypeSprites[PLAYER].Players;
     
    	time_init();				//initialisation du timer
    	memset(&in,0,sizeof(in));
     
    	while(player->life>0 && monsterAlive()){
     
    	/*Traitement des Evenements
    	*/
    		UpdateEvents(&in);
    		if (in.key[SDLK_UP]){	// appui sur la touche haut
    			PlayerMove(player,UP);
    			direction=UP;
    		}
     
    		else if (in.key[SDLK_DOWN]){	// appui sur la touche bas
    			PlayerMove(player,DOWN);
    			direction=DOWN;
    		}
     
    		else if (in.key[SDLK_RIGHT]){	// appui sur la touche droite
    			PlayerMove(player,RIGHT);
    			direction=RIGHT;
    		}
     
    		else if (in.key[SDLK_LEFT]){	// appui sur la touche gauche
    			PlayerMove(player,LEFT);
    			direction=LEFT;
    		}
     
    			if(timerJeu-timerAnim>=100){
    			updateAnimMovePlayer(direction,player,playerMove);
    			timerAnim=timerJeu;
    		}
     
     
    		if (in.key[SDLK_SPACE]) // appui sur la touche espace
    		{
    			PutBombe(player);
    		}
     
     
    		for(i=0;i<2;i++)
    			if(GameScreen->TypeSprites[MONSTER_1+i].Monsters->life>0)
    				RandomMonsterMove(GameScreen->TypeSprites[MONSTER_1+i].Monsters,i+1);
     
     
    		time_update();
    		timerJeu=SDL_GetTicks();
     
     
    		//FocusScrollCenter(GameScreen,&player->box);
    		BlitMap(GameScreen,screen,systeme);
    		SDL_Flip(screen);
    		}
     
    		FMOD_Sound_Release(musique_jeu);
    	//UpdateLevel();
    }
     
     
     
     
    /* Methodes complementaires
    */
     
     
    	//Fonction du multi evenements
    void UpdateEvents(Input* in)
    {
    	SDL_Event event;
    	while(SDL_PollEvent(&event))
    	{
    		switch (event.type)
    		{
    		case SDL_KEYDOWN:
    			in->key[event.key.keysym.sym]=1;
    			break;
    		case SDL_KEYUP:
    			in->key[event.key.keysym.sym]=0;
    			break;
    		case SDL_MOUSEMOTION:
    			in->mousex=event.motion.x;
    			in->mousey=event.motion.y;
    			in->mousexrel=event.motion.xrel;
    			in->mouseyrel=event.motion.yrel;
    			break;
    		case SDL_MOUSEBUTTONDOWN:
    			in->mousebuttons[event.button.button]=1;
    			break;
    		case SDL_MOUSEBUTTONUP:
    			in->mousebuttons[event.button.button]=0;
    			break;
    		case SDL_QUIT:
    			in->quit = 1;
    			break;
    		default:
    			break;
    		}
    	}
    }
     
    bool monsterAlive(){
    	int i;
    	for(i=0;i<2;i++)
    		if(GameScreen->TypeSprites[MONSTER_1+i].Monsters->life>0)
    			return true;
    	return false;
    }
     
    animation loadAnim(char* charset,char *name_file){
    	int i;
    	animation anim;
     
    	FILE *file=NULL;
    	file=fopen(name_file,"rb");
     
    	fread(charset,sizeof(char),10,file);
    	fread(&anim.nbr_of_frames,sizeof(Uint16),1,file);
     
    	anim.frames=(animation_frame*)malloc(anim.nbr_of_frames*sizeof(animation_frame));
    	for(i=0;i<anim.nbr_of_frames;i++){
    	fread(&anim.frames[i].delay,sizeof(anim.frames->delay),1,file);
    	fread(&anim.frames[i].image,sizeof(anim.frames->image),1,file);
    	}
     
    	fclose(file);
     
    	return anim;
    }
     
    void updateAnimMovePlayer(Direct direction,Player player, animator *playerMove){
     
    	if(direction!=player->direction){
    		animator_rewind(&playerMove[player->direction]);
    		animator_play(&playerMove[direction]);
    		player->direction=direction;
    	}
    	else
    	animator_update(&playerMove[player->direction]);
    	}
    malloc.c (la partie où l'erreur est produite):
    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
     
    void * __cdecl _malloc_base (size_t size)
    {
        void *res = NULL;
     
        //  validate size
        if (size <= _HEAP_MAXREQ) {
            for (;;) {
     
                //  allocate memory block
                res = _heap_alloc(size); //ERREUR ICI (fin de la pile)
     
                //  if successful allocation, return pointer to memory
                //  if new handling turned off altogether, return NULL
     
                if (res != NULL)
                {
                    break;
                }
                if (_newmode == 0)
                {
                    errno = ENOMEM;
                    break;
                }
     
                //  call installed new handler
                if (!_callnewh(size))
                    break;
     
                //  new handler was successful -- try to allocate again
            }
        } else {
            _callnewh(size);
            errno = ENOMEM;
            return NULL;
        }
    en regardant la pile, il se trouve que mon programme s'arrête à la ligne 34 de game.c soit GameScreen=(Screen*)malloc(sizeof(Screen)); et plus précisément à la ligne 89 de malloc.c (ligne citée si dessus), honnêtement j'ai passé tout mon temps depuis lors avec mes "collègues" mais cette erreur est toujours incompréhensible, quelqu'un aurait des connaissances sur malloc.c à me faire partager? car la j'aimerais bien comprendre oO
    Merci d'avance ^^

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je n'arrive pas à lire correctement ton code, tout est barré.

    Tu as des fonctions beaucoup trop longues, essaye de faire plus de fonctions.

    Et essaye de tester les codes de retours des différentes fonctions que tu appelle comme ton malloc par exemple.


    Qu'entends-tu par "s'arrête" ? C'est assez vague. Tu as un SEGFAULT ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut
    euh je ne vois rien de barré
    en faite l'erreur c'est une violation d’accès pour l'écriture

    pour la fonction beaucoup trop longue, je sais désolé j'avais une autre fonction à la base pour initialisé ma carte de test, sauf que ça buggé partiellement, alors du coup j'ai tout mis dehors pour tester cette fois ci

    tester le retour de malloc? le problème c'est qu'il ne se fini pas donc ne retourne rien logiquement, sinon je peux juste tester si mon pointeur est toujours NULL non? sauf que le programme s'arrête avant

    edit : bon nouveauté, si je met tout (en dessous de mon malloc de GameScreen) en commentaire, la fonction se lance correctement... je retourne appronfondir tout ca et je vous tiens informé ^^

    edit: maintenant le malloc buggé ce situe sur le TypeCase de la ligne 138 dans game.c ^^"

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je vois tout ton code barré.
    Comme ceci

    Regarde si tu n'as pas une balise U à quelque part dans ton post.


    En général on doit tester presque tous les codes de retours des fonctions retournant quelques choses. Ceci nous permet de trouver directement la fonction qui retourne une ''erreur'', c'est donc très pratique pour débogguer.

    Si ton malloc plante c'est peut être qu'avant une autre fonction s'est mal exécutée.

    Sinon essaye de supprimer tes variables globales ça t'aidera déjà pas mal pour ton débogage.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut
    étrange mes seules balises de mon post sont [S] et [CODE]

    sinon programme de nouveau en pleine forme xP en réalité j'ai modifié le TypeCase car codé ainsi c'était un tableau de pointeur sur structure, chose que je ne suis pas sur que ce soit très utile, je l'ai mit en tableau de structure simple et ca marche ^^(edit: en y repensant je crois que il y avait juste un problème au niveau des définitions des types)

    merci à toi pour avoir prit le temp de me répondre ^^ et désolé pour le code barré

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Par défaut
    Salut,

    tes mallocs sont du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GameScreen=(Screen*)malloc(sizeof(Screen));
    Deux remarques:
    1. le cast est inutile
    2. il *faut* tester la valeur de retour. Si le malloc echoue, malloc renvoie NULL. Dans ce cas, soit tu essaye de libérer de la mémoire qqpart, soit tu quittes ou auter chose, mais il ne fait pas continuer comme si tout allait bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GameScreen=malloc(sizeof(Screen));
    if(GameScreen==NULL){
    /* traitement de l'erreur */
    exit 0;
    }

    Après avoir vu ton dernier message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GameScreen->TypeCase=(TypeCase*)malloc((GameScreen->nbTiles)*sizeof(TypeCas));
    TypeCas est un TypeCase*, donc ici, tu n'alloues de l'espace que pour nbTiles pointeurs. Je ne crois pas que ce soit ce que tu voulais faire.
    En règle générale, il vaut mieux éviter de cacher des pointeur dans les typedef, et encore plus de cumuler des noms comme TypeCase, TypeCas, (ou typeCase et typeCas :p).

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut
    oui bonne réponse ^^ et je sais mon architecture fait peur a voir, c'est simple je n'ai rien modéliser ou analyser ni concu avant de develloppé, résultat : code non extensible et qui s'encrasse au fur et à mesure, voilà pourquoi je recommence le code à 0 cet été ^^
    et promis je testerais toutes mes fonctions à l'avenir ^^

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par Celes_Vongola Voir le message
    étrange mes seules balises de mon post sont [S] et [CODE]
    Je me suis trompé en mettant la balise.

    Je voyais ceci , c'était bien la balise S qui étais en cause, je vois désormais bien ton code correctement.

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Un programme qui marche une fois mais pas l'autre, qui remarche en commentant quelques ou en rajoutant des printf, c'est signe d'un programme avec une mauvaise gestion de la mémoire. Il est possible que, lors d'une exécution, ça "tombe bien" ; dans la suivante, il écrive à des endroits déjà alloués et écrase donc ses propres données. Une solution est d'exécuter ton programme via Valgrind (sous Linux) ou Dr Memory (sous Linux et Windows).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur incompréhensible
    Par Progs dans le forum C++
    Réponses: 13
    Dernier message: 21/06/2005, 14h59
  2. [2.1][jdk1.3][Junit] Erreur incompréhensible!
    Par Sniper37 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 29/04/2005, 19h03
  3. Erreur incompréhensible à la ligne 200 (sur 190 ?!)
    Par transistor49 dans le forum Qt
    Réponses: 3
    Dernier message: 22/03/2005, 23h09
  4. [Fichiers] Erreur incompréhensible
    Par Clorish dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h18
  5. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo