VLA は、alloca 関数を呼び出した場合と同様に、スタックに割り当てられます。VLA の有効期間は、有効範囲に関係なく、alloca の呼び出しによりスタックに割り当てられたデータと同様に、関数から復帰するまでです。割り当てられた領域は、VLA が割り当てられた関数から復帰してスタックが解放されるときに同時に解放されます。
可変長配列では、一部の制約がまだ有効になっていません。制約に違反すると、定義されていない結果になります。
#include <stdio.h> void foo(int); int main(void) { foo(4); return(0); } void foo (int n) { int i; int a[n]; for (i = 0; i < n; i++) a[i] = n-i; for (i = n-1; i >= 0; i--) printf("a[%d] = %d\n", i, a[i]); } example% cc test.c example% a.out a[3] = 1 a[2] = 2 a[1] = 3 a[0] = 4 |