C++ 从函数返回本地声明的指针是否会导致它切换范围?

C++ 从函数返回本地声明的指针是否会导致它切换范围?,c++,c,function,pointers,lifetime,C++,C,Function,Pointers,Lifetime,我知道在使用完指针后,养成使用free()函数销毁指针的习惯是很好的,但是如果从函数返回指针,会发生什么情况呢?我认为它不会发送副本,因为没有机会销毁它。指针是否将作用域“切换”到调用函数 示例(无用代码,小心): 不,您的代码会调用,因为指针指向的内存不再存在。如果希望返回的指针有效,则需要动态地为其分配内存,这将超出函数生命周期 在C中,可以使用和族来分配动态内存 FWIW,free()不会破坏指针。它将动态分配的内存释放给指针(如果已分配)。使用非动态分配的指针调用free将再次导致UB。

我知道在使用完指针后,养成使用
free()
函数销毁指针的习惯是很好的,但是如果从函数返回指针,会发生什么情况呢?我认为它不会发送副本,因为没有机会销毁它。指针是否将作用域“切换”到调用函数

示例(无用代码,小心):

不,您的代码会调用,因为指针指向的内存不再存在。如果希望返回的指针有效,则需要动态地为其分配内存,这将超出函数生命周期

C
中,可以使用和族来分配动态内存


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

因此,使用
malloc()
将允许它在函数的生命周期之后继续存在?@jaska是的,当然。:-)这不是一个复制品——一个C++参考和一个C指针不是一回事。“JuangopangZa先生,这是概念上的相似,但不是完美的复制,imHo。你能重新考虑一下吗?@MarkBessey也许这个更好:。有这么多的重复,但我认为用来关闭它的一个涵盖了它。哦,我不怀疑有很多重复-这就像新的C用户的#1问题。我只是不确定指导人们用另一种语言给出答案是否真的有帮助。
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;
}