Я искал, как динамически использовать deflateBound (), и не нашел именно то, что ищу.
Я посмотрел руководство по zlip, примеры включены в библиотеку и нашел их здесь: Библиотеки сжатия для ARM Cortex M3 / 4 Определите размер сжатого / несжатого буфера для Z-lib в C zlib, deflate: Сколько памяти выделить?
Чего мне не хватает, это как распределить после вызова deflateBound ().Например, это выглядит так, как будто это вызовет проблемы
z_stream defstream;
uint8_t *outBuf=NULL;
uint32_t outLen=0;
defstream.zalloc = Z_NULL;
defstream.zfree = Z_NULL;
defstream.opaque = Z_NULL;
defstream.avail_in = (uInt)inLen;
defstream.next_in = (Bytef *)inBuf:
defstream.avail_out = (uInt)0;
defstream.next_out = (Bytef *)outBuf;
deflateInit(&defstream, Z_DEFAULT_COMPRESSION);
uint32_t estimateLen = deflateBound(&defstream, inLen);
outBuf = malloc(estimateLen);
defstream.avail_out = (uInt)estimateLen;
deflate(&defstream, Z_FINISH);
deflateEnd(&defstream);
Я вижу упоминание realloc, это означает, что рекомендуется начинать с начального (возможно, слишком малого) буфера?
z_stream defstream;
uint8_t *outBuf=NULL;
uint32_t outLen=100;
outBuf = malloc(outLen);
defstream.zalloc = Z_NULL;
defstream.zfree = Z_NULL;
defstream.opaque = Z_NULL;
defstream.avail_in = (uInt)inLen;
defstream.next_in = (Bytef *)inBuf:
defstream.avail_out = (uInt)outLen;
defstream.next_out = (Bytef *)outBuf;
deflateInit(&defstream, Z_DEFAULT_COMPRESSION);
uint32_t estimateLen = deflateBound(&defstream, inLen);
outBuf = realloc(outBufestimateLen);
defstream.avail_out = (uInt)estimateLen;
deflate(&defstream, Z_FINISH);
deflateEnd(&defstream);
Бытьвстроенная система, я пытаюсь упростить задачу