函数返回时函数内部声明的指针发生了什么

时间:2019-04-27 09:35:54

标签: c pointers function-call

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 个答案:

答案 0 :(得分:3)

  

如果我在返回之前未将target设置为NULL,是否会删除目标,以便指向的实际节点目标也会被删除?

不,没有删除(按 free 的意思),只是堆栈中用于参数和局部变量(包括 target )的区域不再存在函数返回后

返回(无论以何种方式)局部变量的地址并在变量消失时取消引用它会出现问题

备注:您使用 typedef 掩盖指针,这是一个的主意,使您的代码不清楚,并易于引入错误