请考虑以下代码: -
struct mystruct {
int data;
struct mystruct *next;
};
void myfunc ()
{
struct mystruct s1;
s1.data= 0;
s1.next = NULL;
myfunc2(&s1);
..
..
}
将此本地结构的地址传递给其他函数是否安全。 这个本地结构是否可以在函数外部使用,还是已经被释放了?
答案 0 :(得分:6)
将局部变量的地址传递给另一个函数是安全的。变量的生命周期延伸到声明它的块(函数或复合语句)的末尾。
返回局部变量的地址或保存指向它的指针并在声明函数返回后使用它是不安全的。
答案 1 :(得分:1)
你的措辞在这个问题上很尴尬。
您可以通过地址将其传递给其他功能。它仍然在有效的范围内。
但是你不能通过你声明它的函数之外的地址(你没有在这里做)返回它。
答案 2 :(得分:1)
它将在myfunc2
中提供,但只有myfunc
没有返回。
如果myfunc2
以某种方式记住这个指针,并在myfunc
返回后尝试使用它,那么就会发生不可预测的事情,因为堆栈已经被恢复,指针将指向那里的垃圾。< / p>