В настоящее время я изучаю массив переменной длины и автоматическое хранение.
У меня есть следующий код, который выделяет память для массива переменной длины 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
, но почему я все еще могу правильно получить доступ к первому и второмуэлемент массива переменной длины?
Определено ли это поведение?или это просто неопределенное поведение, которое просто срабатывает?