2014-12-20 7 views
-2
main() 
{ 
     int n; 
     scanf("%d",&n); 
     char a[n]; 
} 

В этом случае мы не выделяем память во время выполнения на «а», то зачем использовать malloc ??Невозможно выделить память во время выполнения без использования malloc?

+0

Фактически вы являетесь внутренним компилятором, который переводит его в alloca(), который пытается выделить хранилище на стеке, если это возможно, если нет, то он может использовать обычный malloc. Во втором случае он будет вызывать регулярные free(), когда стоп-фрейм рушится. – Anonymous

+0

Я не думаю, что этот вопрос является обманом связанного вопроса. – haccks

+0

Не согласен, что это дуплекс. Существуют конкретные проблемы с массивами переменной длины, которые не рассматриваются в другом ответе. – Tony

ответ

1

char a[n] не разрешен в старом стандарте C. Это разрешено в C99, но только для автоматических переменных (т. Е. В стеке, как в вашем примере). Если вы хотите, скажем, глобальной переменной, вам нужно будет использовать malloc et. и др. для соответствия стандарту.

Edited предоставить некоторые доказательства

Существует helpfulseriesofarticles о переменной длине массивах в C. Из второй статьи «Влас должен быть автоматически (в отличие от статических или экстерна) переменных Блок."

Смежные вопросы