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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
coderl
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 5
#1

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

08.04.2014, 20:29. Просмотров 1948. Ответов 9
Метки нет (Все метки)

Привет, помогите разобраться с освобождением памяти в 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++
В моей программе есть следующий код: char* lexems; // массив указателей на символ char* lexem; // вспомогательная...

Освобождение памяти в деструкторе - C++
Здравствуйте у меня есть три класса: class Date { int iDay, iMonth, iYear; public: Date(); Date(Date&amp;); Date(int Day,...

Освобождение памяти в списках - C++
#pragma once class Node { public: int value; Node * next; Node(int data); ~Node(); };

Освобождение памяти в классах - C++
Программа работает правильно но при завершении выдает ошибку! Ошибка на деструкторе! Пожалуйста объясните почему! Спасибо! #ifndef...

Правильное освобождение памяти - C++
Есть код class Test { public: int **container; int counter = 0; Test(unsigned int size) { container = new int*;

Освобождение участка памяти - C++
Добрый вечер. Подскажите, пожалуйста, где здесь ошибка. В разделе &quot;После освобождения памяти&quot; программа ничего не выдает. #include...

Стек и освобождение памяти - C++
Пишу класс стека, реслизую в виде односвязного списка. stack.h #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED template &lt;class...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
08.04.2014, 20:35     Освобождение памяти в c++ #2
Оно вообще не обязано работать, т.к. разыменовываете указатель после освобождения памяти.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
08.04.2014, 20:54     Освобождение памяти в c++ #3
Цитата Сообщение от coderl Посмотреть сообщение
переменная удаляется
Не удаляется. Указатель на int размещен в стеке.

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

И если вы возьмете за правило после любого delete обнулять указатель на освобожденную память, это избавит вас от многих проблем и вопросов.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
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
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.04.2014, 09:35     Освобождение памяти в c++ #7
Цитата Сообщение от coderl Посмотреть сообщение
и указатель уже не указывает на ячейку памяти.
Указатель у тебя не поменялся. Указывает туда же, куда и указывал. Найди, где написано, что delete меняет значение указателя.
Цитата Сообщение от coderl Посмотреть сообщение
почему тогда в 5 строке все нормально присваивается, ведь память освобождена
Что по-твоему значит "освобождена"? Просто определенная область становится непомеченной, как занятая. Но это не значит, что она сразу возвращается системе и становится запрещена на запись. Слепой случай.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 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++
Всем привет. Есть структура: struct ClientInfo { const char* szUid; const char* szName; const char* szSurname;

Деструктор: освобождение памяти - C++
Как в этом случае освободить память, запутался помогите пожалуйста. class TClass { public: int a; TClass() { cout &lt;&lt; &quot;Ctor...

Полиморфизм и освобождение памяти - C++
class A{ // базовый класс ... }; class B : public A{ // унаследованный от класса A ... }; далее в программе: B...

Выделение и освобождение памяти - C++
Вот встретился с вопросом какой вариант является более правильным и почему. char *Buffer1 = (char *)malloc(65536) char *Buffer2 =...

Освобождение и выделение памяти - C++
Помогите разобраться с программой, где здесь выделение памяти (как я понял это new) и где освобождение памяти. #include &lt;iostream&gt; ...


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

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

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