从函数返回一个局部声明的指针是否会导致它切换作用域?
Does returning a locally-declared pointer from a function cause it to switch scope?
我知道使用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。
相关文章:
- 在新作用域中使用unique_lock是否等效于在使用共享资源的工作结束时解锁调用
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 在一个作用域中推送五个对象指针,然后检查对象的布尔值是否为 false,会给出错误
- 大括号的作用域是否用于注释目的,从而降低C++代码的速度
- 是否随作用域分配和解除分配堆栈帧
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态
- 是否避免因变量作用域而取消分配
- static关键字是否影响作用域
- 提升::作用域的线程是否自动分离
- 如何在C++中检查变量是否在作用域中
- 是否有C++标准类在作用域出口处将变量设置为值
- 使用 clang llvm 检查变量在任意源位置的作用域是否具有范围
- 无作用域枚举是否仍然有用
- 如何找出一个变量是否在clang AST的特定源位置的作用域中
- 在c++中是否有办法访问外部作用域中的局部变量?
- 在c++中是否可以在switch作用域之外声明变量?
- 在iPhone xcode应用程序中,是否可以声明一个具有全局作用域的指针?
- 基于堆栈的RAII是否保证仅在超出c++的作用域后才能运行?
- 是否有可能在不使用指针的情况下将变量的作用域扩展到if语句之外?
- 是否可以使作用域枚举("enum class")在上下文中可转换为布尔值?