2010-12-07 4 views
0

Je crée tampon commeComment supprimer un tampon créé de cette manière?

unsigned char *pb_buffer; 

Je remplirai avec quelques données ffmpeg de certains tampons DIN plus

int len = url_close_dyn_buf(pFormatContext -> pb, (unsigned char **)(&pb_buffer)); 

Je fais des choses avec ces données

Maintenant, je veux supprimer cette tampon de la mienne. Comment faire une telle chose?

J'ai essayé free(&pb_buffer); app meurt ... et me transfère dans une C++ doc Je ne comprends pas ...

J'ai essayé delete[] pb_buffer; os tue mon application ...

+0

Vous n'avez alloué aucun espace pour ce tampon. Soit il y a quelque chose que vous ne nous dites pas ou votre programme est horriblement mauvais (et probablement segfaults). De plus, la distribution '(unsigned char **)' est inutile. – nmichaels

+0

ce qu'il ne dit pas, c'est que url_close_dyn_buf() alloue le tampon pour l'appelant, et qu'il doit être libéré. –

Répondre

1

unsigned char *pb_buffer ne crée pas un tampon, il crée un pointeur, ce qui est tout d'abord ne pointe pas vers quoi que ce soit. C'est l'appel à url_close_dyn_buf qui alloue le tampon, et stocke un pointeur à l'endroit spécifié par son deuxième argument. La documentation de url_close_dyn_buf devrait vous indiquer comment le libérer. La documentation est un peu sommaire, mais av_free(pb_buffer) est la réponse. La documentation pour av_free recommande d'utiliser av_freep(&pb_buffer) à la place: cela fait la même chose, puis définit pb_buffer à 0.

+0

chose drôle est - il n'a pas réduit mem fuite = ( – Rella

+0

@Kabumbus: comment mesurez-vous/définir "fuite de mémoire"? Si c'est avec un outil de détection de fuites approprié (valgrind etc), est-il toujours signaler le même nombre d'allocations fuites? Si c'est avec ps ou gestionnaire de tâches, notez que libérer de la mémoire ne revient généralement pas à l'OS - votre processus va s'y accrocher, ainsi il peut l'utiliser pour d'autres choses. –

3

av_free (pb_buffer) peut-être? La fonction semble être interne à ffmpeg, et sa documentation indique que vous devez utiliser av_free() pour libérer le tampon alloué.

The function is documented here.

+0

ressemble à ça: http://ffmpeg.org/doxygen/trunk/avio_8h.html#3b6a91097ad4f63c0e6ddc3301f18688 – wimh

Questions connexes