В вашем коде много ошибок. Вот самые серьезные из них:
1) Указатель-указатель не является многомерным массивом . Если вы используете указатель к указателю для доступа к многомерному динамически размещаемому массиву, то этот массив должен быть размещен таким образом, который имеет смысл для указателя на указатель.
Похоже, что вы пытаетесь динамически выделить массив указателей, а затем для каждого указателя в этом массиве выделить массив данных. Однако ваш код этого не делает, у вас слишком много уровней косвенности для вашего кода, чтобы иметь какой-либо смысл. Например, paragraph *list;
, зачем вам указатель на структуру, содержащую указатель на указатель?
Вам нужно упростить ваши структуры данных. Вместо этого я предлагаю сделать следующее:
typedef struct {
char name[100];
char** list;
} text;
2) Не называйте typedef так же, как тег struct, это рано или поздно приведет к конфликту пространства имен. Вам даже не нужен тег struct, когда typedef: используется структура, вместо этого делайте, как в моем примере выше.
3) Никогда не печатайте результат malloc / calloc на языке Си. Это скрывает предупреждения компилятора и ошибки. Бесчисленное множество подробных сообщений о причинах, по которым можно найти здесь, на SO .
4) Поскольку это размещенная программа, работающая в операционной системе (я могу сказать, используя обработку файлов), main не может вернуть ничего, кроме int. Измените ваше определение main на int main()
или , оно не будет компилироваться на стандартном компиляторе C .
5) for(n = 0; n < i ; n++) ... list[i]
. Как вы можете определить по собственному коду, не стоит использовать имя переменной i
для чего-либо, кроме итератора цикла. (i
фактически означает итератор). Вот почему у вас есть ошибка.
6) Вы должны закрыть открытый файл, когда закончите с ним, через fclose()
.
7) Вы должны освободить динамически выделенную память, когда закончите с ней, через free()
.