Zlib的compress、uncompress问题,请教一下!

来源:百度知道 编辑:UC知道 时间:2024/05/29 05:18:47
程序代码如下:
int main()
{
unsigned char testStr[] = { 'T', 'e', 's', 't', ' ', 'Z', 'l', 'i', 'b', '!', '\0' };
printf("\ntestStr sizeof = %d\n", sizeof(testStr));
printf("testStr = %s\n", testStr);

uLongf compressSize;
unsigned char *compressBuf = new unsigned char[sizeof(testStr)];
printf("\ncompress : %d\n", compress(compressBuf, &compressSize, testStr, sizeof(testStr)));
printf("compressSize = %d\n", compressSize);
printf("compressBuf = %s\n", compressBuf);

uLongf uncompressSize;
unsigned char *uncompressBuf = new unsigned char[sizeof(testStr)];
printf("\nuncompress : %d\n", uncompress(uncompressBuf, &uncompressSize, compressBuf, compressSize));
printf("uncompressSize = %d\n", uncompressSize);

1. lz77算法对于过小的数据本身性能就不好,导致压缩率极低
2. deflate算法用的静态huffman算法,会引入额外数据
3. deflate算法本身也需要维护数据的额外数据

最终导致压缩结果比压缩前更大。

因为压缩的缓冲区没申请购,导致堆出错,所以delete的时候会崩溃。