После освобождения word
необходимо установить word
на NULL
, поскольку realloc
может быть выполнено только для пустого указателя или действительного указателя, который ранее был возвращен malloc
, calloc
или realloc
.
...
len = 0;
free(word); // after this line, word is no more a valid pointer
word = NULL; // <<<< insert this
n = 0;
...
Другими словами, этот шаблон всегда неверен:
free(foobar);
foobar = realloc(foobar, ...);
Другая возможность вовсе не состоит в том, чтобы вообще освободить word
и позволить следующему realloc
позаботьтесь об этом, что в данном случае, скорее всего, более эффективно.
...
len = 0;
// free(word); remove this line
n = 0;
...
, но тогда вам нужно позвонить free(word);
в конце программы, непосредственно перед return 0;
Итак, конец вашей программы будет выглядеть так:
...
j = 0;
len = 0;
n = 0;
}
i++;
}
free(word);
return 0;