Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 21:17   #1
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию delete[] c++

простой пример:
выделил память под массив, иницализировал его, освободил память

Код:
#include <iostream>

using namespace std;

int main(void)
{
    int *a = new int[5];
    for(int i=0; i<5; i++)
        a[i] = i;
    
    for(int i=0; i<5; i++)
        cout << a[i] << " ";
    cout << endl;
    
    delete[] a;
    
    for(int i=0; i<5; i++)
        cout << a[i] << " ";
    cout << endl;
    cin.get();
    return 0;
}
почему после освобождения памяти можно всё равно распечатать этот массив, и делать с ним что угодно. Что делает delete[] , освобождает память выделенный для массива или что-то другое? Почему тогда элементы сохраняются

Последний раз редактировалось NiCola999; 26.02.2010 в 21:20.
NiCola999 вне форума Ответить с цитированием
Старый 26.02.2010, 21:33   #2
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

думаю, помечает эту память свободной для занимания другими даннными
Namolem вне форума Ответить с цитированием
Старый 26.02.2010, 21:40   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

delete (равно как и delete[]) вовсе не обнуляет байты памяти, некогда предназначавшейся для хранения соответствующих объектов. Этот оператор просто делает определенную область памяти доступной для использования другими частями программы, которые уже смогут поступать с этой памятью по своему усмотрению. Сразу же после освобождения памяти вы можете обнаружить, что по старому адресу все еще ничего не изменилось, но некоторое время спустя эта область памяти может уже использоваться совсем по другому назначению. Это как если вы приехали в гости по старому адресу к своему знакомому падишаху - оба-на! - а там уже музей! Хотя даже через неделю после национализации всего его имущество там все еще был дворец...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 26.02.2010, 22:07   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вам выделили дачный участок, вы там посадили помидоры и отказались от участка, а помидоры на нем остались (вы ведь не стали их уничтожать, перед отказом от участка), и останутся до тех пор, пока это участок не достанется кому-то другому, кто посадит туда свои помидоры.

Тут все точно так же.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 26.02.2010 в 22:09.
ROD вне форума Ответить с цитированием
Старый 26.02.2010, 22:16   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

спасибо) понял
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delete [] nazavrik Общие вопросы C/C++ 6 15.01.2010 22:46
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
Перегрузка операций new, new[], delete, delete[] IgorKr Общие вопросы C/C++ 1 22.10.2008 12:14
new,delete alex87 Общие вопросы C/C++ 1 28.02.2008 17:50
UPDATE и DELETE Дамир БД в Delphi 3 13.03.2007 01:44