【发布时间】:2018-12-19 13:55:56
【问题描述】:
请注意这段代码:
#define CHUNK 0x4000
z_stream strm;
unsigned char out[CHUNK];
int ret;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
int windowsBits = 15;
int GZIP_ENCODING = 16;
ret = deflateInit2(&strm, Z_BEST_SPEED, Z_DEFLATED, windowsBits | GZIP_ENCODING, 1,
Z_DEFAULT_STRATEGY);
if(ret == Z_OK) {
strm.next_in = (z_const unsigned char *)answer;
strm.avail_in = strlen(answer);
do {
strm.avail_out = CHUNK;
strm.next_out = out;
ret = deflate(&strm, Z_FINISH);
} while (strm.avail_out == 0);
}
/* clean up and return */
(void)deflateEnd(&strm);
使用answer(200 个元素的无符号字符数组,最后一个为 \0)填充在 4 个声明和其余部分之间。
它在deflateInit2 Z_MEM_ERROR 上崩溃。
我正在开发 STM32F4(微控制器)。在尝试实施压缩之前,我的 RAM 几乎已满 (~87%)。
当我使用不同的参数时,我让这部分工作了一次,但后来在程序中出现错误(因为我想将 gzip'ed 字符串发送到 HTTP 输出,错误是:
无法识别的编码。
我有:~30 KB 的可用 RAM。
【问题讨论】:
标签: c compression gzip zlib stm32