Что случилось с указателем, объявленным внутри функции, когда функция возвращает - PullRequest
0 голосов
/ 27 апреля 2019

target - это копия существующего указателя. Если я не установлю target в NULL перед возвратом, будет ли цель удалена так, что фактическая цель узла, указывающая на, также будет удалена?

typedef struct node *Node;

void make_curr_point_to_specific_list(List list, int id) {
    Node target = list->head;
    while (target != NULL) {
        if (id == target->id) {
            list->curr = target;
            // should i do "target = NULL;" before returning?
            return;
        }
        target = target->next;
    }
}

1 Ответ

3 голосов
/ 27 апреля 2019

Если я не установлю цель в NULL перед возвратом, будет ли цель удалена так, что фактическая цель узла, указывающая на, будет также удалена?

нет, нетdelete (в значении free ), только область, используемая в стеке для параметров и локальной переменной, включая target , больше не закрывается после того, как функция вернула

Существует проблема, когда вы возвращаете (независимо от способа) адрес локальной переменной и разыменовываете его, когда переменные исчезают

Примечание: вы используете typedef для маскировки указателей, это плохая идея, которая делает ваш код неясным и облегчает появление ошибок

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