如何删除以这种方式创建的缓冲区?

时间:2010-12-07 17:51:22

标签: c++ c memory ffmpeg buffer

所以我创建像

这样的缓冲区
unsigned char *pb_buffer;

我用一些较旧的din缓冲区中的一些ffmpeg数据填充它

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

我用这些数据做了一些事情

现在我要删除我的那个缓冲区。要做这样的事吗?

我试过free(&pb_buffer);应用程序死了......然后带我进入一些C ++文档,我没有得到...

我试过delete[] pb_buffer; os杀了我的应用......

2 个答案:

答案 0 :(得分:3)

也许是av_free(pb_buffer)?该函数似乎是ffmpeg的内部函数,其文档表明您需要使用av_free()来释放它分配的缓冲区。

The function is documented here.

答案 1 :(得分:1)

unsigned char *pb_buffer不创建缓冲区,它会创建一个指针,该指针最初不指向任何东西。它是对url_close_dyn_buf的调用,它分配缓冲区,并在第二个参数指定的位置存储指向它的指针。

url_close_dyn_buf的文档应告诉您如何释放它。文档有点粗略,但av_free(pb_buffer)就是答案。 av_free的文档建议使用av_freep(&pb_buffer):它执行相同的操作,然后将pb_buffer设置为0。