从函数返回一个局部声明的指针是否会导致它切换作用域?

Does returning a locally-declared pointer from a function cause it to switch scope?

本文关键字:是否 作用域 指针 返回 函数 声明 局部 一个      更新时间:2023-10-16

我知道使用free()函数销毁指针的习惯是好的,但是如果从函数返回指针会发生什么?我猜它不会发送副本过来,因为没有机会销毁它。指针是否"切换"范围到调用函数?

示例(无用代码,请注意):

int* getOne(){
    int a = 1, *pA;
    pA = &a;
    return pA;  //what happens to this
}
int main(){
    printf("%i", getOne()); //uses data from the same addresses allocated to pA above?
    return 0;
}

不,您的代码调用未定义的行为,因为指针指向的内存不再存在。如果你希望返回的指针是有效的,你需要动态地为它分配内存,函数生命周期之后仍然存在。

C中,可以使用malloc()和family来分配动态内存。

FWIW, free()不销毁指针。它将动态分配的内存释放给指针(如果已分配)。使用非动态分配的指针调用free,将再次导致UB。