Ваша общая идея верна, но некоторые детали неверны.
Вы не должны использовать косвенные указатели при назначении выделений.
При выделении необходимо добавить 1 к strlen()
, чтобы разрешить foom для конечного нуля.
Вы не должны разыгрывать результат reallo c.
Вы должны проверить успешность realloc()
перед переназначением исходного указателя.
Использовать malloc()
когда вы выделяете память для нового элемента, который вы добавили в массив; realloc()
следует использовать только тогда, когда указатель уже инициализирован.
char **array = null;
...
char **new_array = realloc(array, sizeof(char *) * j);
if (!new_array) {
printf("Allocation failed!\n");
exit(1);
}
array = new_array;
array[j] = malloc(strlen(somearray[i]) + 1);
strcpy(array[j], somearray[i]);
j++;