-1

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

4

2 回答 2

2

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

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

于 2013-02-21T15:50:34.667 回答
1

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

  close(out_fd);

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

只需删除第一个close(out_fd)

分段错误是因为您移动了 out_buf 指针。如果要将值放在他的 malloc 区域内,请使用另一个临时指针并将其移动通过此内存区域。

像这样:

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

然后*out_buf++*tmp_buf++;

也改变out_buf里面的写调用tmp_buf

于 2013-02-21T15:51:35.520 回答