【问题标题】:zlib gzread function error when read .gz file?读取.gz文件时zlib gzread函数错误?
【发布时间】:2017-10-13 22:24:10
【问题描述】:

喜欢标题,这是我的代码:

int decompress_one_file(char *infilename, char *outfilename)
{
    gzFile infile = gzopen(infilename, "rb");
    FILE *outfile = fopen(outfilename, "wb");
    if (!infile || !outfile) return -1;

    char buffer[128] = {NULL};
    int num_read = 0;
    num_read = gzread(infile, buffer, sizeof(buffer)); // crash here
    while (num_read > 0) {
        fwrite(buffer, 1, num_read, outfile);
    }

    gzclose(infile);
    fclose(outfile);
    return 0;
}

当我的控制台应用程序运行到gzread() 时,它崩溃了,我不知道这是什么类型的错误? zlib version: 1.2.11

更新压缩功能:

int compress_one_file(char *infilename, char *outfilename)
{
    FILE *infile = fopen(infilename, "rb");
    gzFile outfile = gzopen(outfilename, "wb");
    if (!infile || !outfile) return -1;

    char inbuffer[128] = {NULL};
    int num_read = 0;
    unsigned long total_read = 0, total_wrote = 0;
    while ((num_read = fread(inbuffer, 1, sizeof(inbuffer), infile)) > 0) {
        total_read += num_read;
        gzwrite(outfile, inbuffer, num_read);
    }
    fclose(infile);
    gzclose(outfile);
    return 0;
}

出现的错误:

有人知道这个错误吗?

【问题讨论】:

  • 你的调试器告诉你什么?有了 Visual Studio,没有理由不使用调试器。
  • this 可以给你一个提示。仔细阅读错误信息。留言
  • 你是什么意思?我在 debug-win32 模式下运行它,当跨过“那条线”时,应用程序崩溃。您需要什么信息?
  • 地址0xbaadf00d 应该升旗。
  • 好的,我去看看。

标签: c++ c gzip zlib


【解决方案1】:

我检查了一下,它在我的工作站上运行良好。可能这里是 gzipped 文件的问题? 你能显示一个导致崩溃的文件吗?

但无论如何你都有一个 fwrite 的无限循环:

int num_read = 0;
while ((num_read = gzread(infile, buffer, sizeof(buffer))) > 0) {
    while (num_read > 0) {
        num_read -= fwrite(buffer, 1, num_read, outfile);
    }   
}

【讨论】:

  • 您是使用优化还是调试选项构建项目?如果您使用优化构建,实际崩溃的地方可能在另一个地方,真正的原因可能与 fwrite() 或 gzclose() 中的问题有关。我使用“gunzip”工具检查并生成了正确解压缩的 gzip 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多