代码如下:
int i;
int* p = &i;
int f= { return *p; }
return &f;
这里i
是局部变量,p
指向i
的引用/指针
.f
指向p
,而&f
转义栈桢.因而,在堆
而不是栈
上分配闭包.
但,p
指向另一个在栈
上的i
,这是崩溃的原因.
到局部栈桢的引用,会转义.这类崩溃,又经常通过测试,而有时又会出错,很难找.
要解决这个问题,要求i
的生命期
比&f
长.
代码如下:
int i;
int* p = &i;
int f= { return *p; }
return &f;
这里i
是局部变量,p
指向i
的引用/指针
.f
指向p
,而&f
转义栈桢.因而,在堆
而不是栈
上分配闭包.
但,p
指向另一个在栈
上的i
,这是崩溃的原因.
到局部栈桢的引用,会转义.这类崩溃,又经常通过测试,而有时又会出错,很难找.
要解决这个问题,要求i
的生命期
比&f
长.
上一篇:d中的闭包
原文import std.stdio;enum Foo { bar}int main(string[] args){
举报文章
请选择举报类型
补充说明
0/200
上传截图
格式支持JPEG/PNG/JPG,图片不超过1.9M