从函数返回本地声明的指针会导致它切换作用域吗?
Does returning a locally-declared pointer from a function cause it to switch scope?
我知道养成使用 free()
函数销毁指针的习惯是件好事,但如果从函数返回指针会怎样?我假设它不会发送副本,因为没有机会销毁它。指针 "switch" 是否指向调用函数?
示例(无用代码,当心):
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;
}
不,您的代码调用 undefined behaviour,因为指针指向的内存不再存在。如果您希望返回的指针有效,则需要为其动态分配内存,live 超出函数生命周期。
在C
中,可以使用malloc()
和family来分配动态内存。
FWIW,free()
不会破坏 指针 。如果已分配,它将动态分配的内存释放给指针。使用非动态分配的指针调用 free,将再次导致 UB。
我知道养成使用 free()
函数销毁指针的习惯是件好事,但如果从函数返回指针会怎样?我假设它不会发送副本,因为没有机会销毁它。指针 "switch" 是否指向调用函数?
示例(无用代码,当心):
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;
}
不,您的代码调用 undefined behaviour,因为指针指向的内存不再存在。如果您希望返回的指针有效,则需要为其动态分配内存,live 超出函数生命周期。
在C
中,可以使用malloc()
和family来分配动态内存。
FWIW,free()
不会破坏 指针 。如果已分配,它将动态分配的内存释放给指针。使用非动态分配的指针调用 free,将再次导致 UB。