Problème bizarre avec free [Résolu]

Signaler
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006
-
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006
-
Boujour à toutes et à tous!


Je me permet de vous écrire parce que je suis face à un problème que je n'arrive pas à résoudre seul.
Voilà, j'alloue un tableau dynamique de "char". Lorsque je dois libé rer ce tableau avec "free", le


programme plante littéralement.
J'ai vérifié la valeur du pointeur vers la zone mémoire alloué, et il ne change pas entre sa création et


son effacement, donc je ne comprend pas du tout d'où peut venir un pareil problème.
J'aimerai que vous m'éclairer sur ce problème et éventuellement me dire quels sont les différents problèmes


que je pourrais rencontrer avec "free".


Un bout de mon code:


u8* pixel_data_line = NULL;
pixel_data_line = (u8*)memalign(16, nb_octet_a_lire);
printf("pixeldataline avant : %p\n", pixel_data_line);
...//Traitement
printf("pixeldataline apres : %p\n", pixel_data_line);
free(pixel_data_line); // <-------------------------------A CETTE LIGNE LE PROG PLANTE


PS : Je programme en C sur Sony PSP


Merci beaucoup pour votre aide.

5 réponses

Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

Bon, finalement après une longue recherche, j'ai enfin trouvé la solution moi même .
En fait, l'erreur est effectivement dans les traitements, mais à ma grande surprise, n'a aucun rapport avec "pixel_data_line".
J'ai fait quelques calculs, et il s'avère que j'écrivais en dehors du tableau dynamique "texture_info->data8".
Merci à ceux qui ont bien voulu m'aider et longue vie au forum de cppfrance
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Un free doit venir après un malloc au même endroit. Je vois pas de malloc dans ton code

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

J'utilise "memalign" au lieu de "malloc", parce qu'il faut que mon tableau soit aligné sur 16bits ;)
Merci quand même de m'avoir répondu
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pardon je connaissais pas cette fonction.
Le problème vient donc certainement de ton traitement:
-modifies-tu pixel_data_line? (il ne faut pas)
-fais attention a ne pas écrire en dehors de la mémoire allouée

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

Je me suis dis la même chose; que le problème vient du traitement. Pour ce qui est de pixel_data_line, j'ai vérifié le pointeur et il reste le même, il reste donc la possibilité que mon traitement écrit en dehors de la zone allouée, cependant, je ne vois pas l'erreur.


Voici le traitement effectué :


for(y = 0; y < texture_info->imageHeight; y++)
{
     fread(pixel_data_line, sizeof(u8), nb_octet_a_lire, FichierID);
     for (x = 0; x < nb_octet_util; x++)
     {
          texture_info->data8[x + (texture_info->imageHeight -1-y) * texture_info->textureWidth ] =  pixel_data_line[x];
      }
}

texture_info->data8 étant un tableau dynamique de "u8" ( unsigned sur 8 bits sur Sony PSP).

Merci pour l'info du dépassement de tampon ;)