在栈中分配 VLA 时,仿佛调用了 alloca 函数。无论其作用域如何,其生存期与通过调用 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 |