char **words = (char **)malloc(sizeof(char*)*lines_allocated);
Выделить lines_allocated
Указатели. Когда вы используете указатель на указатели, вам нужно выделить место для указателей, а для каждого из этих указателей вы выделяете пространство для данных, в данном случае - char *
.
words = (char **)realloc(words,sizeof(char*)*new_size);
Это изменяет размер буфера, так как число строк неизвестно, прежде чем прочитать файл, то вам необходимо увеличить количество указателей вы выделить.
words
указывает на блок, который будет хранить lines_allocated
указателей в первый момент, а затем он будет увеличен до new_size
при необходимости.
В своем коде вы также строку:
/* Allocate space for the next line */
words[i] = malloc(max_line_len);
Какой будет выделять каждую строку отдельно.
Кроме того, не отбрасывает результат из таНоса:
Обратитесь к [man page] (http://linux.die.net/man/3/malloc) для 'malloc' и' realloc'. –