Вопросы

присвоение значения индексу массива возвращает 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 не '\0' прекращено, но вы можете понять это без помощи 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

Похожие записи

Почему при использовании массивов текстур не нужно привязывать семплер к шейдеру?

admin

Доступ DynamoDB в Lambda @ Edge

admin

Подмножество данных по окну временного интервала для каждой строки в кадре данных после использования group_by ()

admin

Изменить цвет значка для некластеризованных маркеров в Mapbox IOS

admin

TFS 2015 Rest Api — параметры запроса игнорируются и не фильтруют сборки?

admin

Управление планом тестирования TFS в отношении новой итерации

admin