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] во втором цикле содержит действительные / одинаковые указатели на последнее состояние блока? Я ожидаю, что второй цикл завершится сбоем, потому что элементы указывают на недопустимую область стека.
Я знаю, что это не лучший кусок кода, и я им не пользуюсь. Но хочу понять, почему после первого цикла, когда блочная структура должна быть разрушена, у меня есть действующий объект стека.