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

Освобождение памяти в c++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
coderl
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 5
08.04.2014, 20:29     Освобождение памяти в c++ #1
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что если освободить память, то переменная удаляется, но почему же такой код:
C++
1
2
3
4
5
6
int *a= new int;
*a=1;
cout <<*a<<endl;
delete a;
*a=2;
cout <<*a;
Выводит 1 2? Ведь по идее он не должен выводить 2, т.к. переменная а удалена.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2014, 20:29     Освобождение памяти в c++
Посмотрите здесь:

C++ Освобождение памяти
C++ Освобождение памяти
резервирование памяти/освобождение памяти для трехмерного массива C++
Освобождение памяти C++
C++ освобождение памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.04.2014, 20:35     Освобождение памяти в c++ #2
Оно вообще не обязано работать, т.к. разыменовываете указатель после освобождения памяти.
gazlan
2863 / 1811 / 272
Регистрация: 27.08.2010
Сообщений: 4,910
Записей в блоге: 1
08.04.2014, 20:54     Освобождение памяти в c++ #3
Цитата Сообщение от coderl Посмотреть сообщение
переменная удаляется
Не удаляется. Указатель на int размещен в стеке.

delete освобождает память выделенную new, так что она может быть использована кем-то еще.

И если вы возьмете за правило после любого delete обнулять указатель на освобожденную память, это избавит вас от многих проблем и вопросов.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.04.2014, 21:01     Освобождение памяти в c++ #4
Цитата Сообщение от gazlan Посмотреть сообщение
И если вы возьмете за правило после любого delete обнулять указатель на освобожденную память, это избавит вас от многих проблем и вопросов.
Или сразу использовать смартпоинтеры.
anonymous_
6 / 6 / 1
Регистрация: 21.11.2013
Сообщений: 22
09.04.2014, 02:13     Освобождение памяти в c++ #5
Вот эта операция new int считай выделит память и вернет указатель на неё т.е адрес и затем ты в своём коде присвоил его своему указателю a
А когда ты вызвал delete a; ты только освободил ту выделенную память
твой объявленный указатель то не куда не девался

Добавлено через 20 минут
Точнее наверно так после операции delete сама переменная типа указателя на инт то не куда не далась, а лишь освободилась та выделенная память
coderl
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 5
09.04.2014, 09:16  [ТС]     Освобождение памяти в c++ #6
почему тогда в 5 строке все нормально присваивается, ведь память освобождена и указатель уже не указывает на ячейку памяти.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.04.2014, 09:35     Освобождение памяти в c++ #7
Цитата Сообщение от coderl Посмотреть сообщение
и указатель уже не указывает на ячейку памяти.
Указатель у тебя не поменялся. Указывает туда же, куда и указывал. Найди, где написано, что delete меняет значение указателя.
Цитата Сообщение от coderl Посмотреть сообщение
почему тогда в 5 строке все нормально присваивается, ведь память освобождена
Что по-твоему значит "освобождена"? Просто определенная область становится непомеченной, как занятая. Но это не значит, что она сразу возвращается системе и становится запрещена на запись. Слепой случай.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
09.04.2014, 09:46     Освобождение памяти в c++ #8
Цитата Сообщение от coderl Посмотреть сообщение
почему тогда в 5 строке все нормально присваивается, ведь память освобождена и указатель уже не указывает на ячейку памяти.
потому что знак зодиака у Вас счастливый
coderl
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 5
09.04.2014, 16:10  [ТС]     Освобождение памяти в c++ #9
Т.е. когда после освобождения памяти я делаю присванивание, то память заного резервируется на этом месте?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 17:54     Освобождение памяти в c++
Еще ссылки по теме:

C++ Освобождение памяти в C++
Освобождение памяти C++
C++ Освобождение памяти

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2014, 17:54     Освобождение памяти в c++ #10
Цитата Сообщение от coderl Посмотреть сообщение
Т.е. когда после освобождения памяти я делаю присванивание, то память заного резервируется на этом месте?
нет
Yandex
Объявления
09.04.2014, 17:54     Освобождение памяти в c++
Ответ Создать тему
Опции темы

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