Liberation de memoire FreeImage

squellettor Messages postés 14 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 19 juillet 2005 - 13 juil. 2005 à 17:57
cs_marco900 Messages postés 6 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 29 janvier 2009 - 28 janv. 2009 à 16:42
Bonjour,

J'utilise la librairie FreeImage, et disposan de plusieur images, je les ai mise dans un tableau declarer comme ceci :

FIBITMAP **tabImage;
tabImage=new FIBITMAP *[nbImages];

je charge mes image ensuite comme cela :

tabImage[i] = FreeImage_Load(FIF_JPEG, ListeFichiers->Strings[i].c_str(), JPEG_DEFAULT);

comme j'ai beaucoup d'images qui se stockent en memoire cela me prend enormement de place en memoire plus de 500 mo suivant les images de depart.Par consequent, il faut que je libere la mémoire a la fin, c la ou est le problème.
J'ai beau faire :

FreeImage_Unload(tabImage[i]);
free(tabImage[i]);

J'ai toujours autant de memoire utilisé. Comme je voudrai utiliser le programme plusieur fois a la suite sans quitter pouis relancer, il faudrai un moyen de liberer corectement la memoire.

Merci de votre aide!

3 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 juil. 2005 à 18:31
J'imagine que la majorité de la place est occupée par les élements de tabImage, pas tabImage lui même (qui fait nbImages * 4 octets). Si la taille ne diminue pas, c'est que FreeImage_Unload ne fait pas son boulot (dans tous les cas, je vois pas ce que free() vient faire la dedans...). Tu es bien sur que c'est cette fonction que tu dois appeler pour libérer la mémoire?
0
squellettor Messages postés 14 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 19 juillet 2005
15 juil. 2005 à 13:42
salut,

En faite, j'ai essayer avec plusieurs fonction pour liberer la memoire, free() et delete() mais aucune des deux ne marche :(

Quelqu'un a une autre solution svp.
Merci.
0
cs_marco900 Messages postés 6 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 29 janvier 2009
28 janv. 2009 à 16:42
Bonjour,
Il n'est jamais trop tard pour répondre...
Je pense que pour créer ton bitmap tu as utiliser la fonction
        bitmap = CreateDIBitmap(GetDC(NULL),FreeImage_GetInfoHeader(TonImage),CBM_INIT,FreeImage_GetBits(TonImage),FreeImage_GetInfo(TonImage),DIB_RGB_COLORS);
A la place de faire un GetDC(NULL):

HDC dc;
dc = GetDC(NULL);
ReleaseDC(NULL,dc);

Ca m'a corrigé bcp de fuites mémoires

------------------------------------------------------------------------------------- 
Si vous arrivez à arrêter de fumer, boire & faire l'amour, vous ne
vivrez pas plus vieux ; ça vous semblera juste plus long...
------------------------------------------------------------------------------------- 
0
Rejoignez-nous