Возник такой вопрос: динамически выделяемые локальные массивы (т. е. место под которые выделяется в стеке) является частью стандарта c или гнутым расширением? К примеру, нижеприведённый код gcc-4.1 нормально компилирует (и он нормально работает), а мелкомягкий компилятор (из msvs) - нет:
int n=10;
double a[n];
Проверялось дебаггером - генерируемый код на второй строке действительно пододвигает указатель стека, выделяя таким образом в нём место для массива.