【发布时间】:2012-11-03 08:12:13
【问题描述】:
我正在使用从教程中获取的这段代码 sn-p。它旨在压缩输入文件中的数据并将其放入输出文件中。但是,它在运行时会出现分段错误:
int map_Compress(char *inmapfile, char *outmapfile)
{
FILE *infile = fopen(inmapfile, "rb");
gzFile outfile = gzopen(outmapfile, "wb");
if (!infile || !outfile) return -1;
char inbuffer[1];
int num_read = 0;
unsigned long total_read = 0;
while ((num_read = fread(&inbuffer, 1, sizeof(inbuffer), infile)) > 0)
{
printf("%d\n",total_read);
total_read += num_read;
gzwrite(outfile, inbuffer, num_read);
}
fclose(infile);
gzclose(outfile);
return total_read;
}
它是这样称呼的:
int main()
{
if (map_Compress("maps/main.map", "maps/main.mz") < 0)
{
printf("Compression failed, couldn't open file(s)\n");
}
return 0;
}
这个段错误是怎么回事?调用它时我在屏幕上看到的只是:
0
1
然后程序崩溃了...这里出了什么问题?我的输入文件有一些我放在那里的垃圾内容,所以该函数不应该将数据压缩到输出文件中吗?
请帮忙,我确定这是我忽略的一个简单问题 :)
【问题讨论】:
-
所以您打算一次读取文件 1 个字节?您可能希望稍微调整一下缓冲区的大小(例如
unsigned char in buffer[1024];)。 -
printf()转换说明符不匹配,传入的是什么。num_read和total_read应声明为size_t。 -
代码在这里运行良好。由于在调用
map_Compress()之前发生了一些不好的事情,您很可能目睹了一个错误功能。 -
^^不,1字节只是为了测试:)
-
这个问题一直困扰着我,我无法让它消失......
标签: c compression zlib