例如:
struct A { char s[10]; } f() {
return (struct A){"hello"};
}
int main()
{
char *str = f().s;
puts(str);
}
str
是否指向有效字符串?或者已经被释放了?
如果安全的话,那么字符串
"hello"
存储在哪里? main 的栈帧?
我认为整个代码是
#include <stdio.h>
struct A { char s[10]; };
struct A f() {
return (struct A){"hello"};
}
int main()
{
char *str = f().s;
puts(str);
}
当函数 f() 返回时,其堆栈帧确实被销毁,但通常存储的返回值
(struct A){"hello"}
将保留在 main func 的堆栈帧中。当调用puts(str);
时,它会指向存储(struct A){"hello"}的内存位置。
你应该知道,返回时将
(struct A){"hello"}
复制到堆栈中是低效的。