Итак, у меня возникают проблемы с распределением памяти для переменной типа char ***
. Моя цель состоит в том, чтобы создать матрицу строк и код, который я сейчас имею для выделения памяти, следующий:
char ***matrix;
matrix = calloc(n*MAX_STR, sizeof(char**));
for(z = 0; z < n; z++) {
matrix[z] = calloc(n, sizeof(char*));
for(i = 0; i < MAX_STR; i++) {
matrix[z][i] = calloc(MAX_STR, sizeof(char));
}
}
Я успешно выделил память для массива строк, используя это:
char **list;
list = calloc(n, sizeof(char *));
for (j = 0; j < n; j++){
list[j] = calloc(MAX_STR, sizeof(char));
}
но у меня возникают проблемы с матрицей.
Запуск программы с помощью --leak-check = full на Valgrind дает мне следующее сообщение:
==5126== Invalid write of size 8
==5126== at 0x400B9F: createmat (proj.c:100)
==5126== by 0x401598: main (proj.c:237)
==5126== Address 0x5210878 is 0 bytes after a block of size 72 alloc'd
==5126== at 0x4C2ABB4: calloc (vg_replace_malloc.c:593)
==5126== by 0x400B52: createmat (proj.c:98)
==5126== by 0x401598: main (proj.c:237)
Я хотел бы выяснить, как выделить память для этого, так как я все еще новичок, когда дело доходит до управления памятью в C. Любая помощь была бы оценена, спасибо.
EDIT:
Предполагается, что в матрице должно храниться n массивов строк, которые соответствуют строкам ввода (они читаются с fgets
позже), и каждый массив выделяет любое число слов, которое имеет линия, с каждым словом (чтение, каждая строка) имея при max a MAX_STR
количество символов.
n
- это переменная, считываемая с ввода, а MAX_STR
- константа, определенная в программе.