Fuites de mémoire !

cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009 - 28 juin 2006 à 21:14
cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009 - 30 juin 2006 à 17:44
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

Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
29 juin 2006 à 21:26
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
0
cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009
30 juin 2006 à 17:44
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
0
Rejoignez-nous