压缩算法

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

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

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

您正在关闭相同文件描述符的两倍

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; 

然后用*tmp_buf++ *out_buf++每个*tmp_buf++ ;

使用out_buf更改write调用中的tmp_buf