代码如下:
int i;
int* p = &i;
int f= { return *p; }
return &f;
这里i
是局部变量,p
指向i
的引用/指针
.
f
指向p
,而&f
转义栈桢.因而,在堆
而不是栈
上分配闭包.
但,p
指向另一个在栈
上的i
,这是崩溃的原因.
到局部栈桢的引用,会转义.这类崩溃,又经常通过测试,而有时又会出错,很难找.
要解决这个问题,要求i
的生命期
比&f
长.