int (^b[3])();
for (int i=0; i<3; i++)
b[i] = ^{ return i;};
for (int i=0; i<3; i++)
printf("b %d\n", b[i]());
在第一个循环中创建块结构,然后将此结构的地址赋给b [i]元素,然后块结构被销毁。问题是为什么第二个循环中的b [i]包含有效/相同的指向块最后状态的指针?我期望第二个循环崩溃,因为元素指向无效的堆栈区域。堆栈块寿命
我知道这不是最好的一段代码,我没有使用它。但想要理解为什么在第一次循环之后,当块结构应该被销毁时,我有有效的堆栈对象。
相关:[无法理解块的词法作用域](http://stackoverflow.com/questions/6647918/unable-to-understand-the-blocks-lexical-scope/6648368#6648368) – 2011-09-13 13:05:55