【问题标题】:compression algorithm压缩算法
【发布时间】:2013-02-27 00:23:10
【问题描述】:

我正在研究一种压缩算法,其中我们必须用 C 语言编写代码。该程序获取一个文件并删除每个字符中的最高有效位,并将压缩文本存储在另一个文件中。我编写了一个名为 compress 的函数,如下所示。释放 out_buf 时出现段错误。任何帮助将是一个很大的乐趣。

【问题讨论】:

    标签: c compression binaryfiles


    【解决方案1】:

    你关闭了 out_fd 两次,所以第二次当然是无效的文件描述符。但更重要的是,您需要检查 sizeof() 的使用,这与查找动态分配缓冲区的缓冲区大小不同(sizeof 返回指针的大小,而不是缓冲区)。您没有显示调用代码,但在传入的缓冲区上使用 strcat() 也总是值得一看(调用者传递的缓冲区是否足够大以显示结果?)。

    无论如何,这应该足以让你重新开始......

    【讨论】:

      【解决方案2】:

      你关闭了两次相同的文件描述符

        close(out_fd);
      
        if ( close(out_fd) == -1 )
          oops("Error closing output file", "");
      

      只需删除第一个close(out_fd)

      分段错误是因为您移动了 out_buf 指针。 如果你想把值放在他的 malloc'd 区域中,使用另一个临时指针并移动它通过这个内存区域。

      像这样:

      unsigned char *out_buf = malloc(5400000*7/8);
      unsigned char *tmp_buf = out_buf;
      

      然后将每个*out_buf++ 替换为*tmp_buf++

      还将写入调用中的out_buf 更改为tmp_buf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        相关资源
        最近更新 更多