Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
igorrr37
1864 / 1482 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
#1

оператор delete[]

04.02.2011, 00:03. Просмотров 2307. Ответов 3
Метки нет (Все метки)

Применение delete (без []) к указателю на массив освобождает только нулевой элемент, а оставшиеся создают утечку памяти, но как объяснить этот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
 
int main(){
    int *mas1=new int[5];      // создаём массив mas1 из 5 элементов
    cout<<"\nmas1= \n";
    for(int i=0; i<5; i++){
        mas1[i]=i;
        cout<<mas1[i]<<"  ";
    }
    delete mas1;                  // освобождаем нулевой элемент массива mas1
    cout<<"\n\nmas2= \n";
    int *mas2=new int[5];       // создаём другой массив из 5 элементов mas2
    for(int i=5; i<10; i++){
        mas2[i-5]=i;
        cout<<mas2[i-5]<<"  ";
    }
    cout<<"\n\nmas1= \n";      // все элементы первого массива перезаписаны. утечки нет..
    for(int i=0; i<5; i++){
        cout<<mas1[i]<<"  ";
    }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 00:03
Ответы с готовыми решениями:

Оператор delete[]
Код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #define ...

оператор delete
#include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;iomanip&gt; using namespace...

Оператор delete
Вчера заметил, но ответа в сети так и не нашел: int *i = new int(5); cout...

Оператор delete[]
Салют! тут вот в чем вопрос... Если с помощью new выделена память под...

Оператор delete
Написал небольшую программу и в просмотрел каждую строчку в отладчике. И...

3
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
04.02.2011, 00:43 #2
Лучший ответ Сообщение было отмечено как решение

Решение

То, что delete, примененный к массиву, удалит только первый элемент это распространенное заблуждение. На самом деле это очередное UB. Конкретная реализация определяет, будет ли удален массив.
6
volovzi
268 / 170 / 11
Регистрация: 14.03.2010
Сообщений: 501
04.02.2011, 01:07 #3
igorrr37, оператор "delete" со скобками удаляет память, выделенную оператором "new" со скобками (аналогично без скобок). А неправильное использование памяти — личная проблема конкретного программиста.
2
igorrr37
1864 / 1482 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
04.02.2011, 01:25  [ТС] #4
Цитата Сообщение от lemegeton Посмотреть сообщение
Конкретная реализация определяет, будет ли удален массив.
Примерно так я и думал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 01:25

Оператор delete в деструкторе
Здравствуйте, нужна помощь, есть класс и функция к которую передается этот...

Можно ли обобщить оператор delete ?
Здравствуйте! Есть некоторый класс в котором есть указатель которому...

Нужно ли тут вызывать оператор delete
Всем здрасьте. Тут встал вопрос об операторе delete. struct x { //... };...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru