динамическое и статическое выделение памяти?

  int x;
    cin>>x;
    int arr[x];

Код не должен компилироваться, потому что программа попытается выделить неизвестную память для массива в стеке, НО ОН КОМпилируется! я знаю, что такое динамическая память, я много читал об этом, но я не понимаю, почему программа выше работает?! не должно быть так? :

int x;
cin>>x;
int *arr=new arr[x];

Может ли кто-нибудь привести мне пример, в котором не работает статическое размещение, а работает только динамическое?


person user3927214    schedule 11.08.2014    source источник
comment
Какой компилятор вы используете?   -  person R Sahu    schedule 11.08.2014
comment
Хотя это не нормально в c. Почему в современных языках, таких как С++ и Java, все в порядке? Я не думаю, что это в компиляторе.   -  person paulj    schedule 11.08.2014
comment
Он скомпилируется, потому что синтаксис правильный. Вот как вы объявляете массив, однако для выделения памяти вы используете либо NEW, либо malloc. Можете ли вы попробовать добавить элементы в массив.   -  person Juniar    schedule 11.08.2014
comment
МОЙ БОГ!!! если это возможно, то я не понимаю, нужно ли нам в первую очередь динамическое выделение памяти. Это также своего рода динамическое выделение памяти (только разница в том, что память будет выделена из стека). Может ли кто-нибудь просветить меня в этой путанице? Спасибо   -  person instance    schedule 11.08.2014


Ответы (1)


Некоторые компиляторы могут разрешать использование динамического размера для массивов, выделенных из стека. Однако это не стандартный C++.

person JarkkoL    schedule 11.08.2014
comment
Я не думаю, что это в компиляторе. Можете ли вы указать некоторые ссылки, чтобы прояснить это? спасибо, мне тоже пригодится. - person paulj; 11.08.2014
comment
У меня нет ссылок, но вы можете поискать в Google массив переменной длины C++. Однако вы можете использовать alloca() для выделения VLA из стека. - person JarkkoL; 11.08.2014
comment
+1 это правильно... Dev-C++ использует GCC, который предоставляет это расширение по умолчанию. См. здесь соответствующие документы gcc. -pedantic запретит это и многие другие расширения. - person Tony Delroy; 11.08.2014