Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
igorrr37
1662 / 1290 / 142
Регистрация: 21.12.2010
Сообщений: 1,962
Записей в блоге: 9
#1

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

04.02.2011, 00:03. Просмотров 1893. Ответов 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[] (C++):

оператор delete - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;iomanip&gt; using namespace std; int main() { setlocale (LC_ALL,&quot;russian&quot;); ...

Оператор delete[] - C++
Код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #define stop __asm nop int main() { int N,M; ...

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

Оператор delete - C++
Написал небольшую программу и в просмотрел каждую строчку в отладчике. И получается что сразу же после оператора delete p_val; значение в...

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

Оператор delete в деструкторе - C++
Здравствуйте, нужна помощь, есть класс и функция к которую передается этот класс: #include&lt;iostream&gt; using namespace std; class...

3
lemegeton
2927 / 1356 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
04.02.2011, 00:43 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
То, что delete, примененный к массиву, удалит только первый элемент это распространенное заблуждение. На самом деле это очередное UB. Конкретная реализация определяет, будет ли удален массив.
6
volovzi
268 / 170 / 8
Регистрация: 14.03.2010
Сообщений: 501
04.02.2011, 01:07 #3
igorrr37, оператор "delete" со скобками удаляет память, выделенную оператором "new" со скобками (аналогично без скобок). А неправильное использование памяти — личная проблема конкретного программиста.
2
igorrr37
1662 / 1290 / 142
Регистрация: 21.12.2010
Сообщений: 1,962
Записей в блоге: 9
04.02.2011, 01:25  [ТС] #4
Цитата Сообщение от lemegeton Посмотреть сообщение
Конкретная реализация определяет, будет ли удален массив.
Примерно так я и думал.
0
04.02.2011, 01:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 01:25
Привет! Вот еще темы с ответами:

Можно ли обобщить оператор delete ? - C++
Здравствуйте! Есть некоторый класс в котором есть указатель которому присваивается некоторое значение &quot;из-вне&quot; так сказать, так вот его...

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

Хочу понять когда можно делать оператор delete - C++
совсем новичок, а в книге толком не объясняется, помогите понять суть плиз Вот очень простой код: #include &lt;windows.h&gt; class...

Оператор delete(ошибка) - free(): invalid next size (fast): 0x098f7008 *** - C++
Делаю некое подобие функции itoa: char* c_itoa(int,char*,int):Реализацию сделал так(упрощённый вид):char* c_itoa(int number,char*...


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

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

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