Создание динамической памяти в с ++ - PullRequest
1 голос
/ 08 декабря 2011

Я пытаюсь создать динамическую память. Размер массива определяется пользовательским вводом. Я получаю следующую ошибку, "expression must have a constant value".

похоже, что я делаю что-то не так. Пожалуйста, помогите мне! Как я могу сделать это динамичным?

Это то, что я имею до сих пор:

int* IntPtr = NULL;
int main(){

 int arraySize;
 cout << "How many numbers will be on the list? ";
 cin >> arraySize;

 IntPtr = new int[arraySize];

Contact list[arraySize]; // <-- expression must be constant

//more code

delete [] IntPtr;

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

Вы пытаетесь использовать Массивы переменной длины .К сожалению, C ++ не позволяет им.(хотя некоторые компиляции допускают их по расширению)

Вместо этого вам нужно динамически распределить массив с помощью new.(и вручную освободить позже с помощью delete)

Вы уже делаете это правильно с:

IntPtr = new int[arraySize];

Теперь вы можете сделать то же самое с переменной list:

Contact *list = new Contact[arraySize];
delete [] list;

В качестве альтернативы вы можете использовать класс vector, который часто предпочитается динамическим массивам.

vector<Contact> list(arraySize);
3 голосов
/ 08 декабря 2011

Используйте взамен std::vector<Contact>, или если вы хотите выделить пустой массив, сделайте то же самое, что и с IntPtr:

Contact* list = new Contact[arraySize]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...