С++ стиль массивов динамического размера (new[] и delete[]) Возможно, случалось и с вами такое, что мы не можем всегда знать размер
массива, когда начинаем писать программу. Нам нужно распределять размер
массива динамически.
Тем не менее, если вы попробовали сделать это, вы заметили, что это не работает!
Давайте попробуем и применим команду cin, чтобы принять размер массива от
пользователя. Давайте спросим пользователя, насколько большой ему нужен
массив и попробуем создать массив такого размера для него:
137 |
С т р а н и ц а
#include using namespace std;
int main()
{
cout << "
Насколько большой?" << endl;
int size; //
пробуем применить переменную для размера...
cin >> size; //
получаем размер от пользователя
int array[ size ]; //
получаем ошибку: "unknown size" (неизвестный размер)
}
Мы получаем следующую ошибку:
error C2133: 'array' : unknown size (
неизвестный размер)
Проблема в том, что компилятор хочет распределить размер массива. И пока
размер переменной не будет обозначен как const, компилятор не будет уверен в
его значении во время компиляции. Компилятор С++ не может задавать размер
массиву во время компиляции, так что он выдаёт ошибку.
Чтобы исправить это, нам нужно распределять массив динамически (на “куче”):
#include using namespace std;
int main()
{
cout << "
Насколько большой?" << endl;
int size; //
пробуем применить переменную для размера...
cin >> size;
int *array = new int[ size ]; //
это работает
//
заполняем массив и выводим
for( int index = 0; index < size; index++ )
{
array[ index ] = index * 2;
cout << array[ index ] << endl;
}
delete[] array; //
должны вызвать delete[] на распределении массива со словом
// new[]!
}
Итак, урок тут заключается в следующем:
Чтобы распределить массив какого-нибудь типа (например int) динамически,
вы должны использовать новый
int[числоЭлементовМассива]
.
Массивы распределённые с new[], позже должны быть удалены с delete[],
иначе вы получите утечку памяти! (этот delete[] с квадратными скобками! А
не обычное удаление).