2016-07-26 5 views
0

私はzlibで遊んでいます。zlib_howを読んだ後も、私はまだいくつかの質問があります。私が理解しているように、deflate()を呼び出す前にdeflateInitを呼び出す必要がありますが、同じストリームを2回以上再利用する意思があるとどうなりますか?zlibを適切にセットアップして使用する

圧縮が完了するたびにdeflateEndに電話し、圧縮が呼び出されるたびにdeflateInitを呼び出すと、再初期化する必要がありますか?内部バッファの動的割り当ては何ですか?

私はinitとend malloc/freeをたくさん見ていますが、内部バッファが呼び出し間で再利用されるような方法で設定できますか?

+0

理由を指定せずにダウンしていますか?非常に役に立ちました... – kreuzerkrieg

答えて

3

あなたは不要free()さんとmalloc()年代を避けるために、deflateReset()代わりのdeflateEnd()deflateInit()続くを使用する必要があります。

zlib.hのドキュメントも読んでください。ここでは、これを発見しました。

+0

ありがとうございました! deflate()が呼び出された後、Z_STREAM_ERRORの場合にdeflateReset()が呼び出されるのに適していますか? deflateEndの代わりに? deflateReset()がZ_STREAM_ERRORを返す場合はどうすればよいですか? deflateEnd()の後にdeflateInit()を呼び出しますか? – kreuzerkrieg

+1

'Z_STREAM_ERROR'を取得した場合、その状態は決して初期化、終了、または破損していません。いずれの場合でも、状態はもはや有効ではないので、 'deflateEnd()'または 'deflateReset()'のいずれかを呼び出すべきではありません。 (これらも気付き、 'Z_STREAM_ERROR'を返す可能性がありますが)適切な順序で初期化、リセット、終了するzlibを適切に使用していて、意図せずに状態を上書きしないと、 'Z_STREAM_ERROR'です。 –

+0

これは非常に重要なメモです。再度、感謝します! – kreuzerkrieg

関連する問題