Я использую Turbojpeg для чтения изображений.
Я делаю что-то вроде этого:
m_data = tjAlloc(MAX_RAW_SIZE);
c_jpeg_buffer = tjAlloc(MAX_RAW_SIZE);
tjDecompressHeader2(jpegDecompressor, c_jpeg_buffer, _jpegSize, &tj_width, &tj_height, &jpegSubsamp);
tjDecompress2(c_jpegDecompressor, m_data, _jpegSize, c_jpeg_buffer, tj_width, 0/*pitch*/, tj_height, TJPF_GRAY, TJFLAG_FASTDCT);
tjFree(c_jpeg_buffer);
tjFree(m_data);
Я хочу перераспределить m_data и c_jpeg_buffer в случае, если _jpegSize или (tj_width * tj_height) слишком велики. В документации turbojpeg предполагается, что это произойдет автоматически, если я использую tjCompress2 (…) или tjTransform (…). Это ничего не говорит о том, что происходит в этом случае. Предположим, я перераспределил буферы — будет ли безопасно использовать tjFree ()?
Для будущих пользователей turboJpeg … RTFM …
Если вы отправляете заранее выделенный буфер, вам нужно передать его размер. И сам буфер, и размер могут быть изменены.
Других решений пока нет …