代码如下:

int i;
int* p = &i;
int f= { return *p; }
return &f;

这里​​i​​是局部变量,​​p​​指向​​i​​的​​引用/指针​​.

​f​​指向​​p​​,而​​&f​​转义栈桢.因而,在​​堆​​而不是​​栈​​上分配闭包.

但,​​p​​指向另一个在​​栈​​上的​​i​​,这是崩溃的原因.

到局部栈桢的引用,会转义.这类崩溃,又经常通过测试,而有时又会出错,很难找.

要解决这个问题,要求​​i​​的​​生命期​​比​​&f​​长.