我的程序對隨機像素覆蓋的圖像進行解碼,對圖像進行解碼,我必須將每個像素的紅色分量乘以10.綠色和藍色分量與新紅色分量的值相同。我創建了多個幫助函數,使代碼更易於在main中讀取,但是當我嘗試運行a.out時,我一直在收到「Segmentation Fault」。我似乎無法找到我的錯誤!幫助表示讚賞。當我運行我的程序時,爲什麼會出現「分段錯誤」?
void check_argument(int arg_list)
{
if (arg_list < 2)
{
perror("usage: a.out <input file>\n");
}
}
void print_pixel(int a, FILE *out)
{
int r, g, b;
r = a * 10;
if (r > 255)
{
r = 255;
}
g = r;
b = r;
fprintf(out, "%d\n", r);
fprintf(out, "%d\n", g);
fprintf(out, "%d\n", b);
}
void read_header(FILE *in)
{
char str[20];
for (int i = 0; i < 3; i++)
{
fgets(str, 20, in);
}
}
FILE* open_files(FILE *infile, char *input[])
{
infile = fopen(input[1], "r");
if (infile == NULL)
{
perror("Error: Cannot read file.\n");
}
return infile;
}
void decode(int arg_list, char *in[])
{
FILE *input, *output;
int check, red, green, blue;
open_files(input, in);
output = fopen("hidden.ppm", "w");
fprintf(output, "P3\n");
fprintf(output, "%d %d\n", 500, 375);
fprintf(output, "255\n");
read_header(input);
check = fscanf(input, "%d %d %d", &red, &green, &blue);
while (check != EOF)
{
print_pixel(red, output);
check = fscanf(input, "%d %d %d", &red, &green, &blue);
}
fclose(input);
fclose(output);
}
int main(int argc, char *argv[])
{
check_argument(argc);
decode(argc, argv);
}
您究竟在哪裏收到錯誤? –
我編譯後使用:gcc -std = c99 -Wall -pedantic puzzle.c,得到a.out文件。但是當我嘗試使用命令行參數運行a.out文件時,它告訴我:「分段錯誤」。 – Karen
在一個調試器中運行它 –