Как освободить c ++ вектор памяти <int>* обр? - PullRequest
4 голосов
/ 26 сентября 2011

У меня есть vector<int>* arr, который на самом деле является двумерным массивом.

arr =  new vector<int> [size];

Это нормально, что я просто делаю

delete arr;

Будет ли arr[i] автоматически удалятьсяТак как это стандартный вектор?

Ответы [ 3 ]

10 голосов
/ 26 сентября 2011

Нет, вы должны использовать delete[], когда использовали new[].

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

Вместо этого просто используйте std::vector<std::vector<int> > или сведите два измерения водин вектор.

6 голосов
/ 26 сентября 2011

Ваш код не работает. Вы должны использовать delete[] с new[]:

delete[] arr;

Как только вы исправите это, ваш код будет работать правильно.

Я должен согласиться с комментаторами, что массив векторов в стиле C выглядит немного сумасшедшим. Почему бы не использовать вектор векторов вместо этого? Это позаботится об управлении памятью для вас.

2 голосов
/ 26 сентября 2011

Вы выделяете массив векторов там. Так что вам нужно удалить массив:

delete [] arr;

Если вы намеревались выделить вектор элементов 'size', вам нужно:

arr =  new vector<int>(size); // don't use array delete for this though!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...