Массивы переменной длины были введены в C99.Насколько мне известно, текущий компилятор Microsoft (VC2010) не поддерживает C99 (или, по крайней мере, его часть VLA).
Вы можете использовать malloc
для выполнениято же самое, просто запомните free
, когда закончите.
Что-то вроде:
int length = 10;
int *a = malloc (length * sizeof(int));
if (a == NULL) {
doSomethingIntelligentSinceNoMemoryLeft();
} else {
useToHeartsContent (a[0], "thru", a[9]);
free (a);
}
Возможно, вы также можете использовать alloca
, что аналогичноVLA в том смысле, что он выделяет место в стеке для блоков памяти переменных.
Но вы должны быть осторожными .В то время как alloca
дает вам автоматическое перераспределение при выходе из функции, стек обычно меньше ресурсов, чем куча malloc
, и, если вы исчерпали кучу, он возвращает вам NULL.Если вы выбрасываете свой стек, это, вероятно, проявится как сбой.
alloca(n)
, вероятно, приемлемо для достаточно малых значений n
.