/ / zlib uncompress()を使用中に処理されない例外 - c ++、圧縮、zlib、解凍

zlib uncompress()を使用している間に処理されない例外 - c ++、圧縮、zlib、圧縮解除

私はいくつかの問題を実行しているzlib uncompress()関数による解凍。私が圧縮したファイルは、uncompressFile()にfileSourceとして渡されていて、ランタイム例外をスローしないで、完璧に動作しませんでした。基本的には、ファイルからfreadを読み込み、バッファで圧縮し、次に圧縮/伸長する。 私の解凍機能:

    bool unCompressFile(const char* fileSource, const char* fileDestination) {
std::cout << "nFilesize: " << fileSize << std::endl << "compressedSize: " << compressedSize << std::endl;
// Test printout: fileSize = 164008 && compressedSize = 77778
// These were the values from a test program
char* bufferSource = new char[(sizeof(char) * compressedSize + 1)];
if (!bufferSource) {
std::cout << "Error allocating memory n"; return false;
}
// Reading from previously compressed file
FILE* inputFile = NULL;
inputFile = fopen(fileSource, "rb");
if (!inputFile) { return false; } // Error handling

if (!fread(bufferSource, compressedSize, 1, inputFile)) {
fclose(inputFile);
delete[] bufferSource;
return false;
}
fclose(inputFile);

uLong destinationLen = fileSize;
Bytef* bufferDestination = new Bytef[fileSize + 1];
int result = uncompress(bufferDestination, &destinationLen, (const Bytef*)bufferSource, compressedSize); // Here is the error

fclose(outputFile);

delete[] bufferSource;
delete[] bufferDestination;

return true;

}

文字列fileSourceはすでに圧縮されたファイルへのパスで、fileDestinationはfwriteを使用する出力です(ここでは省略します)。両方 compressedSize そして fileSize グローバル変数です。 fileSizeの値は元のファイルの長さ(バイト単位)で、compressedSizeは圧縮データのサイズ(compress()によって変更)です。例外は圧縮解除関数で発生します。そうでない場合、エラー・プリントは表示されません。このランタイムエラーの原因を調べることはできません。

編集1: 私はcompress2()で試してみましたが、圧縮レベル私は0(なし)を基本的に無圧縮で試して、私のunCompressFile関数が機能しました。何かが減圧を台無しにしていますが、私はそれを把握できません。

編集2: 圧縮ファイルの最初の30バイト:

78 9C EC B9 77 54 53 4D F4 2E 7C D2 03 84 10 31 90 84 1A A4 2B 1D 04 14 84 D0 51 EA 2B 55

回答:

回答№1は0

無効にする ASM686 zlibをビルドするときに、この種のエラーや他の種類のエラーを避けるためのオプションです。 Mark Adlerが言ったように:

これらはzlibへの第三者の寄付であり、サポートされていません。支払期日 圧縮と解凍の両方に関する報告された問題 アセンブラコードでは、私はcontribディレクトリからそれらを削除する予定です。 次のバージョン。