2013-02-21 85 views
-1

我正在研究一种压缩算法,其中我们必须用C语言编写代码。该程序需要一个文件并删除每个字符中最重要的位,并将压缩的文本存储在另一个文件中。我写了一个名为compress的函数,如下所示。在释放out_buf时我遇到了seg错误。任何帮助将是一件非常愉快的事情。压缩算法

回答

2

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

无论如何,这应该足以让你再次去......

1

你关闭同一文件描述符两次

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; 

然后SUBST每*out_buf++*tmp_buf++;

更改out_buf内写呼叫tmp_buf