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]要素に割り当てられ、ブロック構造が破棄されます。問題は、2番目のループのb [i]がブロックの最後の状態への有効/同じポインタを含む理由です。要素が無効なスタック領域を指しているので、2番目のループがクラッシュすると思います。スタックブロックの寿命
私はこれが最高のコードではないことを知っています。私はそれを使用していません。しかし、なぜ最初のループの後、ブロック構造が破壊されるべきなのか理解したい、私は有効なスタックオブジェクトを持っています。
関連[ブロックの字句範囲を理解できません](http://stackoverflow.com/questions/6647918/unable-to-understand-the-blocks-lexical-scope/6648368#6648368) –