チュートリアルから取得したこのコード スニペットを使用しています。入力ファイルからのデータを圧縮し、出力ファイルに入れることを意図しています。ただし、実行時にセグメンテーション違反が発生します。
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
そして、プログラムがクラッシュします... 何が問題なのですか? 入力ファイルにガベージ コンテンツが含まれているため、関数はデータを圧縮して出力ファイルに入れるべきではありませんか?
助けてください、私はそれが私が見落とした単純な問題だと確信しています:)