Форум программистов, компьютерный форум CyberForum.ru

оператор delete[] - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
04.02.2011, 00:03     оператор delete[] #1
Применение 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]<<"  ";
    }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 00:03     оператор delete[]
Посмотрите здесь:

C++ Оператор delete[]
Можно ли обобщить оператор delete ? C++
Оператор delete C++
Оператор delete[] C++
Оператор delete C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.02.2011, 00:43     оператор delete[] #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
То, что delete, примененный к массиву, удалит только первый элемент это распространенное заблуждение. На самом деле это очередное UB. Конкретная реализация определяет, будет ли удален массив.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
04.02.2011, 01:07     оператор delete[] #3
igorrr37, оператор "delete" со скобками удаляет память, выделенную оператором "new" со скобками (аналогично без скобок). А неправильное использование памяти — личная проблема конкретного программиста.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
04.02.2011, 01:25  [ТС]     оператор delete[] #4
Цитата Сообщение от lemegeton Посмотреть сообщение
Конкретная реализация определяет, будет ли удален массив.
Примерно так я и думал.
Yandex
Объявления
04.02.2011, 01:25     оператор delete[]
Ответ Создать тему
Опции темы

Текущее время: 12:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru