Limiter la mémoire utiliser par ses programmes

[Résolu]
Signaler
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Présentement je suis entrain de dévelloper un mini jeux de plateforme du genre Mario avec SDL. Le jeux fonction très bien sauf que j'ai remarquer qu'il ralentit énormement à près un certain temps et cela vient du fait qu'il utilise de façon démesuré et croissant l'espace mémoire. J'ai réussit à ralentir la prise de mémoire de mon jeux avec les macros ifndef, mais malgré tout le problème persiste.

main.c : http://www.pastebin.us/8997
draw.c : http://www.pastebin.us/8998
draw.h : http://www.pastebin.us/8999
calc.c : http://www.pastebin.us/9000
calc.h : http://www.pastebin.us/9001

Les autres fichiers font partis de la libraire SDL ou sont des librairies standard.

Si vous avez une quelquonque idée d'où cela pourrait venir merci d'avancer de me donner des pistes, ça fait seulement quelque mois que je fais du c.

4 réponses

Messages postés
237
Date d'inscription
lundi 20 mai 2002
Statut
Membre
Dernière intervention
22 juillet 2011
2
Salut!


Si ta mémoire augmente tout le temps, c'est que tu as une fuite quelque
part. J'ai pas le temps de regarder ton code en détail, mais voici
quelques pistes :


Tu es sûr de libérer toute la mémoire utilisée? A chaque fois (ou
presque) que tu fais un malloc(), il doit y avoir un free() associé...


De même, dans ta fonction drawRect(), tu fais un
SDL_CreateRGBSurface(), alors qu'il n'y a pas de SDL_FreeSurface()...
Et je suppose que tu appelles cette fonction relativement souvent
(genre, a chaque frame)... Pas étonnant à partir de là que ta mémoire
augmente...


Il faut que tu vérifies ce genre de choses... De même, tout à  la
fin de ton main(), tu dois faire un SDL_FreeSurface(ecran);


Bien cordialement,
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Salut Arto_8000,

effectivement ça sent la fuite à plein nez ! (pas de gaz )
Ce qu'a dit planton va certainement résoudre ton problème, mais j'en profite pour ajouter autre chose.
Il y aussi un delete qui doit être associé à chaque new !!!

PS: désolé pour la blague foireuse

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Statut
Membre
Dernière intervention
22 juillet 2011
2
Oui, mais le problème ne se pose pas ici étant donné qu'il code en C, et non en C++... Mais c'est quand même bon de le signaler !

PS : La culture c'est comme la confiture... Moins on en a, plus on l'étale (ca n'a rien de personnel, c'est juste pour répondre a ta citation )
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
Merci de m'avoir aider cette fuite de gaz ... heu de mémoire, c'était effectivement à cause qu'il manquait les SDL_FreeSurface pour la totalité des fonctions qui créaient des surfaces.