Проблема в том, что вы определяете buffer
как указатель, но вы не указываете на то, что может содержать отсканированную строку, поэтому scanf
записывает в нераспределенную память, что действительно плохо.Вы также не выделяете input[i]
, поэтому strcpy
также потерпит неудачу.Возможно, вы захотите изменить это, чтобы использовать strdup
вместо этого:
input[i++] = strdup(buffer);
Еще пара придирок: при сканировании строки вам не нужен &
в строковом буфере, поэтому повторите это так:
scanf("%s", buffer);
И вы не должны разыгрывать результат realloc
(или malloc
либо в этом отношении):
input = realloc(input, (i+1) * sizeof(char *));