рваный * char 2d массив с realloc - PullRequest
       11

рваный * char 2d массив с realloc

0 голосов
/ 26 января 2020

Мне было интересно, как создать массив ragget 2d string (char *) в c. (мой пример кода выглядит следующим образом)

    int j = 1;
    char **array = null;
   ... read string...
   *array = (char *) realloc(sizeof(char *) * j);
   j++;
(sirAvertisment[j] = (char **) realloc((*sirAvertisment)[j],sizeof(char *) * strlen(somearray[i]))

например, я хочу это

  1. ALFABET
  2. APPLE
  3. KID
  4. SEMAPHORES

но с указателями, поэтому, когда я читаю 1 строку матрицы, я получаю слово завершено

1 Ответ

1 голос
/ 26 января 2020

Ваша общая идея верна, но некоторые детали неверны.

Вы не должны использовать косвенные указатели при назначении выделений.

При выделении необходимо добавить 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++;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...