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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
#1

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

04.02.2011, 00:03. Просмотров 1359. Ответов 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]<<"  ";
    }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 00:03     оператор delete[]
Посмотрите здесь:

C++ Оператор delete(ошибка) - free(): invalid next size (fast): 0x098f7008 ***
C++ Оператор delete[]
C++ В чем разница между delete и delete[]?
Можно ли обобщить оператор delete ? C++
Оператор delete C++
Оператор delete[] C++
Оператор delete C++
C++ оператор delete
Оператор delete в деструкторе C++
C++ Нужно ли тут вызывать оператор delete
Оператор "delete" и ошибка "_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) Error" C++
C++ Хочу понять когда можно делать оператор delete

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2914 / 1343 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.02.2011, 00:43     оператор delete[] #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
То, что delete, примененный к массиву, удалит только первый элемент это распространенное заблуждение. На самом деле это очередное UB. Конкретная реализация определяет, будет ли удален массив.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
04.02.2011, 01:07     оператор delete[] #3
igorrr37, оператор "delete" со скобками удаляет память, выделенную оператором "new" со скобками (аналогично без скобок). А неправильное использование памяти — личная проблема конкретного программиста.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
04.02.2011, 01:25  [ТС]     оператор delete[] #4
Цитата Сообщение от lemegeton Посмотреть сообщение
Конкретная реализация определяет, будет ли удален массив.
Примерно так я и думал.
Yandex
Объявления
04.02.2011, 01:25     оператор delete[]
Ответ Создать тему
Опции темы

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