我目前正在研究可变长度数组和自动存储。
我有以下代码为myArray
函数内部的可变长度数组分配内存vla
,并从函数返回指向可变长度数组的指针。
#include <stdio.h>
int * vla(int n){
int myArray[n];
myArray[0] = 10;
myArray[1] = 11;
int * pointerToInt = myArray;
return pointerToInt;
}
int main(void){
int * pointerToInt = vla(10);
printf("%d, %d", pointerToInt[0], pointerToInt[1]); // prints 10, 11
return 0;
}
我以为变长数组属于自动存储类(即当我们进入包含变长数组的函数时会为变长数组分配内存,函数退出后会自动释放内存)
那么按照这个逻辑,分配给myArray
变长数组的内存在我们从vla
方法返回后就被释放了,但是为什么我仍然可以正确访问变长数组的第一个和第二个元素呢?
是否定义了这种行为?还是只是碰巧起作用的未定义行为?