У меня странные проблемы с моим кодом, и я понятия не имею, что я делаю неправильно.Я относительно новичок в языке Си, поэтому я был бы очень признателен, если бы кто-то мог указать, что я делаю что-то глупое.
Я пытаюсь прочитать данные из файла в двумерный массивтип состояние .Тип состояния определяется следующим образом:
typedef uint8_t state [4][4];
Я определил метод read_block , который получает указатель файла в качестве параметра и возвращает указатель двухмерного типа состояние массив, который содержитпервые 16 байтов из этого файла.
state* read_block(FILE *fp) {
state *arr = (state*) malloc(sizeof (state));
uint8_t *temp = (uint8_t*) malloc(sizeof (uint8_t)*16);
fread(temp, 16, 1, fp);
/*
for (int y = 0; y < 16; y++) {
printf("%u ", temp[y]);
}
printf("\n");
*/
int n = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
/*
printf("%u ", temp[n]);
*/
*arr[i][j] = temp[n];
n++;
}
}
return arr;
}
Код компилируется и работает нормально, но массив типа state , возвращаемый методом, всегда содержит одно неверное значение.В частности, значение в позиции [3] [0] всегда неверно.
Тестовый файл, который я пытаюсь прочитать, содержит числа:
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
Я решил проверить, соответствуют ли значениячитаются правильно, и если я удаляю комментарии вокруг строк printf, я получаю в качестве вывода:
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
0 1 2 3 0 1 2 3 0 1 2 3 3 1 2 3
, в котором первая строка точно верна (это печатается сразу после fread () ),но по какой-то причине вторая строка неверна (это печатается при вставке значений в arr ).
Я не могу понять, что является причиной этого.Я также пытался читать значения по одному байту за раз с fread , но это же значение продолжает ошибаться.Я использую NetBeans, поэтому я не уверен, что это как-то вызвано этим.