2014-09-05 17 views
0

我使用zlib的-1.2.8和我打電話在我的代碼compress2(dest, destLen, source, sourceLen, level)compress.c壓縮數據。的Zlib調用deflateInit功能總是返回Z_MEM_ERROR

功能compress2 (dest, destLen, source, sourceLen, level)呼籲 deflateInit(&stream, level);

deflateInit是宏。

#define deflateInit(strm, level) \ 
    deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) 

也就是說compress2呼籲deflateInit_。 我的問題是deflateInit_正在返回Z_MEM_ERROR

我想調試deflateInit_但沒有得到任何我已經放在那裏的調試消息。

而且我評論的所有exising代碼中的功能deflateInit_和即Z_BUF_ERROR函數返回不同的錯誤,但仍然deflateInit_將返回Z_MEM_ERROR。 在這裏,如果我明確回到Z_BUF_ERROR仍然是getting Z_MEM_ERROR

請給我一些這種行爲背後的指針。

回答

1

它意味着它說什麼。 zlib正在調用malloc(),它返回NULL。這可能是因爲沒有足夠的內存來滿足malloc()要求。用默認參數放氣需要分配約260K的功能。

+0

我正在從zlib-1-2-3更新zlib庫到zlib-1-2-8。 但我沒有得到早期版本的zlib的這個錯誤。即zlib-1-2-3。 這是否意味着zlib-1-2-3分配較小的內存? – 2014-09-06 14:08:42

+0

不,他們分配相同的內存。你使用什麼樣的系統?我懷疑,在這個擁有多GB內存的系統中,你有一個無法提供260K內存的系統。肯定會有更深層的錯誤。 – 2014-09-06 15:42:03

+0

如果您對zlib進行了更改,但沒有看到行爲發生變化,那麼您可能沒有運行您剛剛構建的zlib,而是使用鏈接器在您的zlib(libz.so *)上找到的其他一些zlib副本電腦。嘗試使用「ldd」來查明。 – 2014-09-07 22:05:11

相關問題