Означает ли это "Отладчик в CS50 не работает" означает debug50
?Возможно, вы установили точку останова после сегфоута.Сегфоут приходит сюда fread(&buffer[i], 1, 512, inptr);
(строка 51).В принципе, он не может «уместить» 512 байт данных по адресу буфера [i] для некоторого i.
Вообще говоря, входной файл должен читаться в точно одном месте, как здесь: while (fread(buffer, 512, 1, inptr) == 1)
Что будет делать этот цикл:
for (int i = 0; i < block; i++)
{
fread(&buffer[i], 1, 512, inptr);
}
(если он не был segfault!)?Он собирается прочитать 512 512-байтовых блоков из infile.Ничего себе, он, безусловно, пропустит некоторые действительно важные данные, не так ли?
Программа должна прочитать inptr
в одном месте, while
подходит, а затем решить, что делать с каждым прочитанным блоком,Существует три варианта:
- сброс (не найдено первой подписи jpeg)
- запись в текущий jpeg
- начало нового jpeg (это блок подписи))
И помните, блок подписи является неотъемлемой и необходимой частью вывода.
// write data of block after header
for (int j = 0; j < block - 4; j++)
{
fwrite(&buffer[j+4], 1, 512, img);
}
- это отбрасывание заголовка, что приведет киспорченный вывод.