Limiter la mémoire utiliser par ses programmes

Résolu
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 29 nov. 2006 à 02:09
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 29 nov. 2006 à 23:33
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

platon179 Messages postés 237 Date d'inscription lundi 20 mai 2002 Statut Membre Dernière intervention 22 juillet 2011 2
29 nov. 2006 à 09:10
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,
3
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
29 nov. 2006 à 10:00
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 !"
0
platon179 Messages postés 237 Date d'inscription lundi 20 mai 2002 Statut Membre Dernière intervention 22 juillet 2011 2
29 nov. 2006 à 10:57
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 )
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
29 nov. 2006 à 23:33
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.
0