присвоение значения индексу массива возвращает SIGSEGV; ошибка сегментации. | c

Я получаю ошибку сегментации в строке 28 приведенного ниже кода. Примечание: программа не завершена.

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // get data FILE* raw = fopen(«card.raw», «r»); int rawLength = 0; while(fgetc(raw) != EOF){ rawLength++; } char dat[rawLength + 1]; fread(dat, 1, rawLength + 1, raw); // separate data into blocks int data[sizeof(dat) / 512][512]; data[0][0] = atoi(*dat[0]); // <———— this is line 28 where the error is happening. for(int i = 0; i < sizeof(data) / 4; i += 512) { for(int j = 0; j < 512; j++) { data[i][j] = atoi(*dat[i + j]); } } }

Этот код должен открыть необработанный файл с именем «card.raw» и прочитать его содержимое и размер. Затем он проверяет наличие jpeg внутри файла, используя официальный заголовок jpeg: «0xff 0xd8 0xff [что-то от 0xe0 до 0xef]».

На данный момент это все, что он делает, но когда я закончу с ним, он должен сохранить каждый найденный jpeg в новом файле. По сути, это система восстановления jpeg, поскольку папка для мусора ваших устройств похожа на нее. Все, о чем я прошу, это выяснить ошибку; вам не нужно писать целую программу восстановления, если вы не можете прямо сейчас. спасибо за помощь!

Почему бы тебе не попробовать его отладить? Если вы не можете использовать отладчик, добавьте распечатки. Например, проверьте / распечатайте значение rawLength, длину dat после того, как вы прочитали его из raw файла. Я предполагаю, что dat не ‘’ прекращено, но вы можете понять это без помощи Stackoverflow.   —  person person the human    schedule 23.05.2020

Неясно, подходит ли содержимое файла для atoi; в любом случае он не должен вылетать, если dat не завершается нулевым символом. Добавьте memset (dat, 0, sizeof (dat)); сразу после объявления char dat[rawLength + 1];. В худшем случае массив будет содержать 0 в последней позиции.   —  person person the human    schedule 23.05.2020

fread ничего не читает. После fgetcreturn EOF это конец файла — больше нечего fread. Какое значение имеет rawLength? Кроме того, я не верю, что вы понимаете, что делает atoi. Чего вы ждете на выходе? Хранит ли файл строку с нулевым завершением?   —  person person the human    schedule 23.05.2020

спасибо @KamilCuk за подсказку, но у меня все еще та же проблема на той же строке.   —  person person the human    schedule 23.05.2020

Источник: ledsshop.ru

Стиль жизни - Здоровье!