Моя программа декодирует изображение, которое покрывается случайными пикселями, чтобы декодировать изображение, я должен умножить красные цветовые компоненты каждого пикселя на 10. Зеленые и синие цветовые компоненты имеют те же значения, что и новый красный компонент. Я создал несколько вспомогательных функций, чтобы сделать код более легким для чтения в основном, но когда я пытаюсь запустить my.out, я продолжаю получать «Ошибка сегментации». Кажется, я не могу найти свои ошибки! Помощь приветствуется.Почему я получаю «Ошибка сегментации» при запуске моей программы?
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
запустите его в отладчике –