Это меня уже давно беспокоит. Это лежит в основе моего (отсутствия) понимания разницы между статическим и динамическим распределением памяти. Следующий массив представляет собой обычный статический массив, что должно означать, что память выделяется во время компиляции, правильно? Тем не менее, я настроил его так, чтобы пользователь вводил размер массива во время выполнения.
#include <iostream>
using namespace std;
int main() {
cout << "how many elements should the array hold? ";
int arraySize;
cin >> arraySize;
int arr[arraySize];
for (int i = 0; i < arraySize; ++i)
arr[i] = i * 2;
return 0;
}
Обратите внимание, что в этой программе нет операторов new
или delete
. Он отлично работает в Xcode 4.2 (компилятор Clang по умолчанию), а также на сервере UNIX моей школы (GCC 4.4.5). Как компилятор узнает, сколько памяти выделить для arr
, когда массив создается во время компиляции? Это просто случайность моего компилятора, опасный код, который может повредить другую память, или это законно?