在类型分析中,我们对以下程序显示的逃逸的栈单元这个错误未能找出,这超出了类型分析的范围。
baz() {
var x;
return &x;
}
main() {
var p;
p=baz(); *p=1;
return *p;
}
在执行了指向分析之后,我们可以轻松进行逃逸分析以捕获此类错误。我们只需检查:在指向图中,返回表达式所指向的可能的单元,不可以指向函数本身中定义的参数或变量。(如果指向那么就是逃逸了!)因为所有其他位置必定位于调用栈上的较早帧中。(也就是说其他的可以,例如例子里面,在main里面,而不是baz的,那么就OK!)