Массив статический, но размер массива неизвестен до времени выполнения. Как такое возможно?

Это меня уже давно беспокоит. Это лежит в основе моего (отсутствия) понимания разницы между статическим и динамическим распределением памяти. Следующий массив представляет собой обычный статический массив, что должно означать, что память выделяется во время компиляции, правильно? Тем не менее, я настроил его так, чтобы пользователь вводил размер массива во время выполнения.

#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 , когда массив создается во время компиляции? Это просто случайность моего компилятора, опасный код, который может повредить другую память, или это законно?

9
задан y0ssar1an 14 January 2012 в 09:49
поделиться