Fuites de mémoire !

Signaler
Messages postés
69
Date d'inscription
samedi 4 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2009
-
Messages postés
69
Date d'inscription
samedi 4 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2009
-
Bonjour ,

Je commence a programmer des jeux , mais malheureusement j'ai manifestement quelques problèmes :

quand je le lance deux ou trois fois , cela passe encore , mais
plusieurs fois (une dizaine) mon pc commence à buguer  sévèrement
et m'oblige un redémarrage.Pourtant, je détruit bien toutes mes
ressources à la fin.

Pourriez vous me dire comment éviter ce genre de problèmes ?

Je post un des codes en question (il n'est pas fini, fait avec allegro , pas de datafile, timers et son)


#include

#define Largeur_Ecran  640

#define Hauteur_Ecran  480

#define Tilesize 33

#define grid_w  10

#define grid_h  10


BITMAP *buffer,*grid;

BITMAP *tiles ;

BITMAP *background;

int init();

void deinit();

void draw_map();

void draw_player() ;

void draw_font();


int map[grid_h][grid_w]={

0,0,0,0,0,0,0,0,0,0,

0,3,6,4,6,6,6,6,4,0,

0,7,0,8,0,9,0,0,8,0,

0,7,0,8,5,5,5,5,2,0,

0,1,5,2,0,0,8,9,8,0,

0,7,0,8,0,9,8,0,8,0,

0,1,5,2,5,5,2,0,8,0,

0,7,0,0,9,0,8,0,8,0,

0,1,5,5,5,5,2,5,2,0,

0,0,0,0,0,0,0,0,0,0,

 };

 

  void draw_all();


int main(int argc, char *argv[])

{

if(init()<0) return 0;

bool done = false ;


    while(!done)//If the user hits escape, quit the program

   { 

       clear(buffer);

       draw_all();

      if(key[KEY_ESC]){done = true ; }

     

   }

    deinit();

    return 0; // Exit with no errors

}


END_OF_MAIN()


int init()

 {

    allegro_init();

    install_keyboard();

        set_color_depth(16);

    set_gfx_mode(GFX_AUTODETECT_WINDOWED, Largeur_Ecran,Hauteur_Ecran,0,0);


    buffer = create_bitmap(Largeur_Ecran,Hauteur_Ecran);

  

    tiles =load_bitmap("tankbrigade.bmp",NULL);

    if(!tiles){return 0;}

    background =load_bitmap("green016.bmp",NULL);

    if(!background){return 0;}

     return 0;

 }


void deinit()

 {

  destroy_bitmap(buffer);

   destroy_bitmap(tiles);

   destroy_bitmap(grid);

 }


void draw_map()

{

  grid = create_bitmap(32*10,32*10);

  int i,j;

     for(i=0;i<10;i++)

      {

        for(j=0;j<10;j++)

         {

         

          if(map[j][i]==0) { blit(tiles,grid,(11*33)-2,2*33,i*32,j*32,32,32);}

          if(map[j][i]==1) { blit(tiles,grid,1*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==2) { blit(tiles,grid,2*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==3) { blit(tiles,grid,3*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==4) { blit(tiles,grid,4*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==5) { blit(tiles,grid,5*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==6) { blit(tiles,grid,6*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==7) { blit(tiles,grid,7*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==8) { blit(tiles,grid,8*33,6*33,i*32,j*32,32,32);}

          if(map[j][i]==9)
{
blit(tiles,grid,6*33,4*33,i*32,j*32,32,32);}      


          }

      }

    blit(grid,buffer,0,0,35,35,640,480);

}


void draw_player()

 {

  blit(tiles,buffer,Tilesize*15,Tilesize*1,32,32,32,32);

 }

void draw_all()

 {

  draw_font();

  draw_map();

  draw_player();

  blit(buffer,screen,0,0,0,0,Largeur_Ecran,Hauteur_Ecran);

}


void draw_font()

{

 int i,j;

 for(i=0;i<5;i++)   

  blit(background,buffer,0,0,i*96,0,Largeur_Ecran,Hauteur_Ecran);

 }

2 réponses

Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
10 février 2008

Salut,

Ce n'est peut etre pas un probleme de fuite mémoire puisqu'une fois fermer, le systeme d'exploitation libère automatiquement toute la mémoire allouée par ton programme. Il y a des fuites seulement pendant l'execution du soft si tu oublis un delete a un new ... (allocation dynamique).

Sinon sur la partie du code que tu as mis, je n'ai rien vu de suspect
Messages postés
69
Date d'inscription
samedi 4 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2009

Merci XD en fait j'ai retapé entierement le code (ajout de data file ,players , collisions )

et ça marche pour l'instant ^^

Je pense que je le posterai en complet bientôt