【发布时间】:2013-02-27 00:23:10
【问题描述】:
我正在研究一种压缩算法,其中我们必须用 C 语言编写代码。该程序获取一个文件并删除每个字符中的最高有效位,并将压缩文本存储在另一个文件中。我编写了一个名为 compress 的函数,如下所示。释放 out_buf 时出现段错误。任何帮助将是一个很大的乐趣。
【问题讨论】:
标签: c compression binaryfiles
我正在研究一种压缩算法,其中我们必须用 C 语言编写代码。该程序获取一个文件并删除每个字符中的最高有效位,并将压缩文本存储在另一个文件中。我编写了一个名为 compress 的函数,如下所示。释放 out_buf 时出现段错误。任何帮助将是一个很大的乐趣。
【问题讨论】:
标签: c compression binaryfiles
你关闭了 out_fd 两次,所以第二次当然是无效的文件描述符。但更重要的是,您需要检查 sizeof() 的使用,这与查找动态分配缓冲区的缓冲区大小不同(sizeof 返回指针的大小,而不是缓冲区)。您没有显示调用代码,但在传入的缓冲区上使用 strcat() 也总是值得一看(调用者传递的缓冲区是否足够大以显示结果?)。
无论如何,这应该足以让你重新开始......
【讨论】:
你关闭了两次相同的文件描述符
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
【讨论】: