Возможные причины
- Вы никогда не инициализировали
friends[i]
, прежде чем сделать realloc
- или вы realloc освобожденный блок
- или
friends[i]
не было установлено в NULL или результат malloc
Потому что вы делаете
realloc(friends[i], (strlen(friends[i]) + 1) * sizeof(char));
и printf , скорее всего, действительный, вероятно, действителен. Я подозреваю, что вы находитесь в третьем случае ошибки, и вы делаете что-то не так, как
friends[i] = "aze";
...
reallocToMinSize(friends, ...);
или
char s[...];
...
friends[i] = s;
...
reallocToMinSize(friends, ...);
или
char * s = malloc(...);
...
friends[i] = s + offset; /* offset not null */
...
reallocToMinSize(friends, ...);
или
...
friends[i] = strtok(...);
...
reallocToMinSize(friends, ...);
или, может быть, вторая ошибка делает
char * s = malloc(...); /* unique allocation */
...
for (i = ...) { ... friends[i] = s; ... } /* always the same value of s */
...
reallocToMinSize(friends, ...);
потому что malloc может освободить свой первый аргумент, поэтому в reallocToMinSize для данного индекса вы применяете realloc к блоку, освобожденному для более низкого индекса