The declaration:
int apply[size];
creates a variable length array. When it goes out of scope, the compiler must produce some code that cleans up the allocation for that array. Jumping into the scope of such an object is forbidden I imagine because some implementations might need to arrange for some initialization that the clean up code would require, and if you jump into the scope the initialization would be bypassed.
If you change to a dynamic allocation, the initialization and clean up become your responsibility instead of the compiler's.