Переход к началу массива указателей - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь использовать индекс для возврата к началу массива указателей, но у меня возникли некоторые трудности.Вот что у меня есть до сих пор:

void free_x (char **strings, const int free_outer_array)
{
    int pointer_offset=0;
    while (*strings) { 
        pointer_offset ++;
        free (*strings); 
        *strings++ = NULL;
    }

    *strings = *(strings-pointer_offset); // this line?
    if (free_outer_array)
        free(strings);

}

После сбора информации о смещении относительно того, как далеко указатель прошел свое первоначальное положение, как мне «восстановить» указатель в этом точном положении?

1 Ответ

3 голосов
/ 29 сентября 2019

Вы настраивали stringsstrings++), поэтому вы хотите настроить strings назад, а не *strings:

strings = strings - pointer_offset;

Но было бы прощесохранить исходное значение или выполнить цикл с использованием другой переменной.

void free_x (char **strings, const int free_outer_array)
{
    char **p = strings;

    while (*p) { 
        free(*p); 
        *p++ = NULL;
    }

    if (free_outer_array)
        free(strings);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...