Как удалить созданный таким образом буфер? - PullRequest
0 голосов
/ 07 декабря 2010

Итак, я создаю буфер, как

unsigned char *pb_buffer;

Я заполняю его некоторыми данными ffmpeg из более старого буфера din

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

Я делаю кое-что с этими данными

Теперь я хочу удалить мой буфер. что делать?

Я попробовал free(&pb_buffer); приложение умирает ... и приводит меня в какой-то C ++ документ, который я не получаю ...

Я пытался delete[] pb_buffer; ОС убивает мое приложение ...

Ответы [ 2 ]

3 голосов
/ 07 декабря 2010

av_free (pb_buffer) возможно?Эта функция, по-видимому, является внутренней по отношению к ffmpeg, и ее документация указывает, что вам необходимо использовать av_free () для освобождения выделенного буфера.

Функция документирована здесь.

1 голос
/ 07 декабря 2010

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.

...