Function 返回堆栈上的指针
在C语言中,当我从函数返回堆栈创建变量的指针时,函数返回后内存将丢弃,从而使指针无法取消引用。但是在围棋中,编译器没有给我任何错误。这是否意味着这样做是安全的Function 返回堆栈上的指针,function,go,stack,Function,Go,Stack,在C语言中,当我从函数返回堆栈创建变量的指针时,函数返回后内存将丢弃,从而使指针无法取消引用。但是在围棋中,编译器没有给我任何错误。这是否意味着这样做是安全的 package main import ( "fmt" ) func main() { fmt.Println(*(something())) } func something() *string { s := "a" return &s } 是的,这是安全的,也是围棋编程的正常模式。Go
package main
import (
"fmt"
)
func main() {
fmt.Println(*(something()))
}
func something() *string {
s := "a"
return &s
}
是的,这是安全的,也是围棋编程的正常模式。Go使用指针将任何值自动从堆栈转移到堆中。您不需要关心分配值的位置 从Go常见问题解答: 如果编译器无法证明函数返回后未引用该变量,则编译器必须在垃圾收集堆上分配该变量,以避免悬空指针错误
通过使用
-gcflags-m
选项,您可以在编译期间看到这些优化选项 是的,在Golang中,可以返回指向局部变量的指针。Golang将为您管理对象的生命周期,并在指向它的所有指针消失后释放它
在另一个答案中,我指出了C/C++指针和Golang指针之间的所有区别: