@julien_sorel

Как добавить строку в динамический массив строк?

Пишу функцию, которая добавляет строку в массив строк:

char **add_string(char **array, const char *string)
{
    int i = 0;
    while (array[i] != NULL){        
        i++;
    }
    array = realloc(array, (i + 1) * sizeof(char *));
    array[i] = malloc((strlen(string) + 1));
    strcpy(array[i], string); 
    return array;
}

Функция работает, но Valgrid выдает

Invalid read of size 8, 29 bytes are definitely lost in 5 blocks.

Изначально сам массив инициализирован вот так:

char **init_array(void)
{
char **array = malloc(sizeof(char *));
array[0] = NULL;
return array;
}
  • Вопрос задан
  • 3269 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
array = realloc(array, (i + 1) * sizeof(char *));
    array[i] = malloc((strlen(string) + 1));

Поскольку вы отмечаете последний элемент массива с помощью NULL, этот код должен выглядеть так:
array = realloc(array, (i + 2) * sizeof(char *));
    array[i] = malloc((strlen(string) + 1));
    array[i + 1] = NULL;


Без этого, после добавления первого элемента цикл поиска будет искать за пределами массива array.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы