يرجى مراعاة هذا الرمز:
#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) مملوءة بين الإعلانات الأربعة والباقي.
تحطم في deflateInit2
على Z_MEM_ERROR
.
أنا أعمل على STM32F4 (متحكم). كانت ذاكرة RAM الخاصة بي ممتلئة تقريبًا (~ 87٪) قبل محاولة تنفيذ الضغط.
لقد عملت على هذا الجزء مرة واحدة عندما استخدمت معلمات مختلفة ولكن كان لدي خطأ لاحقًا في البرنامج (لأنني أريد إرسال سلسلة gzip'ed إلى إخراج HTTP ، كان الخطأ:
unrecognized encoding.
لدي: ~ 30 كيلو بايت من ذاكرة الوصول العشوائي المجانية.