Problème bizarre avec free

Résolu
saturne_1606 Messages postés 29 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 23 juin 2006 - 22 juin 2006 à 20:26
saturne_1606 Messages postés 29 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 23 juin 2006 - 23 juin 2006 à 23:59
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

saturne_1606 Messages postés 29 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 23 juin 2006
23 juin 2006 à 23:59
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
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 juin 2006 à 21:14
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
0
saturne_1606 Messages postés 29 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 23 juin 2006
22 juin 2006 à 21:42
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 juin 2006 à 22:25
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
saturne_1606 Messages postés 29 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 23 juin 2006
22 juin 2006 à 23:22
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 ;)
0
Rejoignez-nous