Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Память освобождается, но значение остается

03.03.2016, 20:53. Показов 4082. Ответов 78
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему в следующем коде, программа завершается принудительно, но в консоли все равно видно значение переменной, память которой была удалена?
Откуда берется это значение?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int* getIntegerFromHeap()
{
    int *x = new int(20);
    return x;
}
 
int main()
{
    int *x = getIntegerFromHeap();
    cout << *x << std::endl;
    delete x;
    cout << *x;//выводит в консоль 20 и программа аварийно завершается 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2016, 20:53
Ответы с готовыми решениями:

Не освобождается память
Мне надо сделать прогу,точнее переделать, с использованием динамического двумерного массива... Я не буду писать эту прогу в изночальном...

Освобождается ли память?
Под вводимое с клавиатуры количество переменных выделяется память. Затем переменным в цикле присваивается значение. int units, *x; ...

Память освобождается не полностью
Суть такова. При многократном выделении/освобождении растет (судя по диспетчеру задач Шindows) используемая программой память. Например,...

78
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 19:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это не прямой доступ к физической памяти. Доступ получается именно опосредованный - через посредство механизма проекции виртуального адресного пространства на физическую память.
Я говорил об этом в 56-м сообщении.
Следуя вашей идее, прямого доступа к физической памяти вообще не существует. Я с этим не согласен. Точнее, я не считаю механизм трансляции виртуальных адресов в физические посредником.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
castaway, так ведь доступ к физ памяти означает означает отсуствие абстракции про страницы виртуальной памяти. Как по мне доступ не прямой, если приходится "переадресовывать"
Переадресация происходит на аппаратном уровне. То, что я ответил пользователю TheCalligrapher - относится и к вашему вопросу.

TheCalligrapher, rikimaru2013, как вы считаете, вообще существует прямой доступ к физическому адресному пространству? Если да, то как вы его себе представляете?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,418
04.03.2016, 19:46
Цитата Сообщение от castaway Посмотреть сообщение
Следуя вашей идее, прямого доступа к физической памяти вообще не существует.
Нет, этого не следует. Следует лишь то, что значение терминов "прямой" и "не прямой" зависит от контекста.

Например, в контексте программирования на языке С++, доступ к значению в памяти через непосредственную переменную может называться "прямым", а доступ через указатель - "не прямым". Это всем понятная терминология, которая ни у кого не вызывает споров.

В то же время понятно, что в контексте физической организации памяти доступ к обычной переменной и доступ через указатель ничем не отличаются - оба одинаковы в своей "прямости".
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 19:51
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет, этого не следует. Следует лишь то, что значение терминов "прямой" и "не прямой" зависит от контекста.
Контекст вполне понятен. Вот его корни:
Цитата Сообщение от hoggy Посмотреть сообщение
работа с памятью на самом деле достаточно хитрая.
процессы не имеют прямого доступа к физической памяти.
вместо этого, они оперируют так называемыми "страницами виртуальной памяти".


Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Например, в контексте программирования на языке С++, доступ к значению в памяти через непосредственную переменную может называться "прямым", а доступ через указатель - "не прямым". Это всем понятная терминология, которая ни у кого не вызывает споров.
В данном случае мы это (язык C++) не обсуждаем.



Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В то же время понятно, что в контексте физической организации памяти доступ к обычной переменной и доступ через указатель ничем не отличаются - оба одинаковы в своей "прямости".
Опять же. Речь не о C++!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.03.2016, 20:09
Цитата Сообщение от castaway Посмотреть сообщение
Контекст вполне понятен. Вот его корни:
опосредованный (через механизм виртуальных страниц) способ доступа не может быть прямым,
по определению понятия "опосредосванности".

вы пишите:

Цитата Сообщение от castaway Посмотреть сообщение
я не считаю механизм трансляции виртуальных адресов в физические посредником.
это ваше личное дело.
страна у нас свободная.

однако, что бы понять тз собеседника,
вы должны исходить с его точки зрения,
а не из своей собственной.
тогда все сразу станет на свои места.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,418
04.03.2016, 20:18
Цитата Сообщение от castaway Посмотреть сообщение
В данном случае мы это (язык C++) не обсуждаем.
А что, кто-то сказал, что мы язык C++ обсуждаем? Я лишь привел пример контекста, в котором эти термины имеют установившиеся значения, отличные от ваших.

В контексте же темы физической организации памяти отличия в между системами без виртуальной памяти (типа старого доброго DOS) и современных систем с виртуальной памятью тоже описывается всем понятными хорошо устоявшимися общепринятыми терминами: прямой доступ к RAM в системах без виртуальной памяти и непрямой доступ в системах с виртуальной память. Все прекрасно понимают, что имеется в виду. И все прекрасно понимают, что и в системах с виртуальной памятью мы к конечном итоге тоже работаем с физической RAM, но в то же время все прекрасно понимают, что имеется в виду под "прямой" и "не прямой" в данном случае. Поэтому я не вижу смысла в ваших попытках навязать нам какую-то другую терминологию, как "единственно правильную".

Кстати, есть и другой, альтернативный подход к восприятию систем с выгружаемой на диск виртуальной памятью. Он заключается в том, что никакой физической памяти нет вообще. Это выдумка. Работаете вы с диском, диском, диском и только с диском. А некая "физическая память" RAM в вашем компьютере - это не более чем совершено побочный опциональный кэш, существующий лишь для ускорения доступа к диску. Этот кэш совершенно непринципипиален и в некоем экстремальном случае его может вообще не быть. В рамках такого восприятия ваши утверждения о том, что работа с физической памятью всегда ведется напрямую, вообще не имеют смысла. Ибо в общем случае нет никакой физической памяти. А если и есть, то это лишь непринципиальная и никому не интересная деталь реализации доступа к диску.

Поэтому мне не ясно, зачем вы нам тут пытаетесь навязывать какую-то "единственно правильную" трактовку понятий, о которых всем прекрасно известно то, что эти понятия сильно контекстно-зависимы.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 20:22
Цитата Сообщение от hoggy Посмотреть сообщение
однако, что бы понять тз собеседника,
вы должны исходить с его точки зрения,
а не из своей собственной.
тогда все сразу станет на свои места.
А если я считаю точку зрения собеседника неверной? Мне что делать, посоветуйте.

Цитата Сообщение от hoggy Посмотреть сообщение
опосредованный (через механизм виртуальных страниц) способ доступа не может быть прямым,
по определению понятия "опосредосванности".
Козыри я приберёг напоследок раз уж на то пошло...
В "реальном режиме" работы процессора нет никакой трансляции и мы можем обращаться к физическому адресу напрямую. Вы до сих пор будете настаивать на своём?

Вы поймите меня правильно, у меня не было умысла к кому-то придраться. Я лишь хотел прояснить ситуацию, а вы начинаете лезть в ... эту, как её,.. ну вы меня поняли.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.03.2016, 20:25
Цитата Сообщение от castaway Посмотреть сообщение
А если я считаю точку зрения собеседника неверной? Мне что делать, посоветуйте.
да все что хотите.
например, можете просто не соглашаться.

цемес в том, что прежде чем посчитать тз объекта верной или не верной,
её сначала нужно понять.

вы же сейчас декларируете таким образом:
"я вас не до конца понимаю, но я с вами не согласен"

такой подход прибыли не приносит.
одни убытки.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 20:26
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А что, кто-то сказал, что мы язык C++ обсуждаем?
Это "вытекает" из вашего контекста.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Поэтому я не вижу смысла в ваших попытках навязать нам какую-то другую терминологию, как "единственно правильную".
А я не вижу смысла в ваших попытках. Почему по-вашему правильная - ваша?
Дальше даже читать не хочу. Вы всё-таки не понимаете что я хочу вам донести.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,418
04.03.2016, 20:28
Цитата Сообщение от castaway Посмотреть сообщение
А если я считаю точку зрения собеседника неверной? Мне что делать, посоветуйте.
Сделать шаг назад и подумать о том, в какой консерватории вам надо что-то поправить.

Ваш вопрос звучит как "Посоветуйте, что мне делать, если я считаю восьмеричную систему счисления неверной".
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.03.2016, 20:29
Цитата Сообщение от castaway Посмотреть сообщение
В "реальном режиме" работы процессора нет никакой трансляции и мы можем обращаться к физическому адресу напрямую. Вы до сих пор будете настаивать на своём?
реальный режим работы процессора не имеет
никакого отношения к работе клиентского приложения.
и не может иметь до тех пор, пока клиентское приложение
не сможет однозначно ответить на вопрос: "физический адрес чего?"

в этом вся суть абстракции памяти.


Не по теме:

есть такая история. реальная.
один парень, МФТИ, отличник-ботаник-заучко.
сошел с ума.
по его словам, он просто сидел за партой и в какой то момент осознал,
что все это - не более, чем молекулы.
он сам, парта, и тд.
"нас нет", - говорил он. есть только молекулы
он рехнулся.

0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 20:29
Цитата Сообщение от hoggy Посмотреть сообщение
цемес в том, что прежде чем посчитать тз объекта верной или не верной,
её сначала нужно понять.
Согласен. И мне, почему-то, кажется что я понимаю это лучше чем вы.

Цитата Сообщение от hoggy Посмотреть сообщение
вы же сейчас декларируете таким образом:
"я вас не до конца понимаю, но я с вами не согласен"
Это не так. Если вы правильно выразились, то и я вас понял правильно. Другое дело, если вы выразились неправильно...

hoggy, что на счёт этого:
Цитата Сообщение от castaway Посмотреть сообщение
В "реальном режиме" работы процессора нет никакой трансляции и мы можем обращаться к физическому адресу напрямую. Вы до сих пор будете настаивать на своём?
0
93 / 6 / 5
Регистрация: 25.02.2016
Сообщений: 30
04.03.2016, 20:30
Уважаемые эксперты С++, в таких вопросах как управление памятью априори не должно быть таких споров. Должно быть только да или нет. А Вы, люди с многолетнем стажем, опытом разработки ПО промышленных масштабов, спорите об этом. Да ещё так спорите, что у меня, как у новичка, уже голова кругом идет. У каждого есть своя версия что такое память, что такое адреса, кто и как её выделяет и как к ней обращаться. Но ведь не бывает такого, чтобы все работали с разной памятью. Уж давайте определимся с понятиями. Есть ведь люди тут которые знают 100% истину?
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
04.03.2016, 20:31
Что то непонятное обсуждаете. Что есть прямой доступ?

Добавлено через 1 минуту
Даже если страничная трансляция отключена все равно будет сегментное преобразование (таблица дескрипторов). Если включена "сегментное преобразование" -> "страничное преобразование". Это первый что ли прямой?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 20:35
Цитата Сообщение от hoggy Посмотреть сообщение
реальный режим работы процессора не имеет
никакого отношения к работе клиентского приложения.
Почему? Вы вообще знаете что такое "реальный" режим работы процессора?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Сделать шаг назад и подумать о том, в какой консерватории вам надо что-то поправить.
Ваш вопрос звучит как "Посоветуйте, что мне делать, если я считаю восьмеричную систему счисления неверной".
Я потерял интерес в общении с вами. На этом наш диалог прекращается.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,418
04.03.2016, 20:37
Цитата Сообщение от castaway Посмотреть сообщение
Это "вытекает" из вашего контекста.
Нет, не вытекает. Слово "например" как бы намекает нам, что просто приводится пример.

Цитата Сообщение от castaway Посмотреть сообщение
А я не вижу смысла в ваших попытках. Почему по-вашему правильная - ваша?
Потому что она не "моя", а хорошо установившаяся и общепринятая.

Белое вино называют "белым" - это установившаяся общепринятая терминология. И если вы нам будете тут рассказывать, что называть его надо "желтым", ибо цвет у него явно желтый, то вы будете не поняты. Да, мы все прекрасно знаем, что белое вино по цвету скорее желтое, но не считаем, что по этому поводу надо производить какую-то терминологическую революцию.

Вот также и с доступом к RAM в системах с виртуальной памятью. Да, мы все прекрасно понимаем, что работаем в итоге именно непосредственно с RAM. И в то же время, все прекрасно понимают, что имеется в виду под "непрямостью" доступа к RAM в таких системах.

Добавлено через 56 секунд
Цитата Сообщение от castaway Посмотреть сообщение
Я потерял интерес в общении с вами. На этом наш диалог прекращается.
Это не страшно
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
04.03.2016, 20:40
Цитата Сообщение от castaway Посмотреть сообщение
В "реальном режиме" работы процессора нет никакой трансляции и мы можем обращаться к физическому адресу напрямую.
Все верно говорите. Не пойму, что они к вам придрались.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 20:55
Цитата Сообщение от jupman Посмотреть сообщение
Все верно говорите. Не пойму, что они к вам придрались.
Просто они гордые дилетанты в этих вопросах.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.03.2016, 21:18
Цитата Сообщение от castaway Посмотреть сообщение
И мне, почему-то, кажется что я понимаю это лучше чем вы.
давайте гипотетически представим, что так и есть.
вы лучше меня понимаете сабж.

ок.

ну и что?

вот здесь у вас и происходит затык.

вы ничего мне не объясняете.
и я выше себя все равно не прыгну.
и мы оба оказываемся в тупике.

есть один выход:
если вы что-то знаете лучше (уверены в себе, и тп)
просто поделитесь этим.

Цитата Сообщение от castaway Посмотреть сообщение
что на счёт этого:
вкрывая инкапсуляцию,
вы погружаетесь в удивительный мир новых вопросов:
к адресу чего вы обращаетесь?
зачем?
как это работает?

это не имеет никакого отношения к тем алгоритмам,
что были описаны в исходном коде.

а с позиции исходного кода вы можете не знать,
и даже не озадачиваться вопросами:
на какой именно машине исполняется машинный код вашего запроса.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.03.2016, 21:35
Цитата Сообщение от hoggy Посмотреть сообщение
вы ничего мне не объясняете.
А что вы хотите чтобы я вам объяснил? С моей стороны попытки были.

Цитата Сообщение от hoggy Посмотреть сообщение
есть один выход:
если вы что-то знаете лучше (уверены в себе, и тп)
просто поделитесь этим.
Так я с вами и пытаюсь поделится этим, своими знаниями, пониманием этого.
Увы, весь принцип работы "реального" и "защищенного" режимов объяснить слишком сложно, да и я не вундеркинд, всего не знаю.

Цитата Сообщение от hoggy Посмотреть сообщение
вкрывая инкапсуляцию,
вы погружаетесь в удивительный мир новых вопросов:
к адресу чего вы обращаетесь?
зачем?
как это работает?
Вы о чём? Это возврат к С++ или вы имеете в виду что-то другое?

Цитата Сообщение от hoggy Посмотреть сообщение
это не имеет никакого отношения к тем алгоритмам,
что были описаны в исходном коде.
Верно. Как и ваше утверждение:
Цитата Сообщение от hoggy Посмотреть сообщение
процессы не имеют прямого доступа к физической памяти.


Цитата Сообщение от hoggy Посмотреть сообщение
а с позиции исходного кода вы можете не знать,
и даже не озадачиваться вопросами:
на какой именно машине исполняется машинный код вашего запроса.
А вот это самое интересное. Вам даже не известна архитектура, а вы уже так категорично утверждаете: "процессы не имеют прямого доступа к физической памяти". Глупо так рассуждать, согласитесь!?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2016, 21:35

Почему память массива не освобождается?
В выводе *b должна быть ересь, но на самом деле коректно выводит цифру &quot;3&quot;. #include &lt;iostream&gt; using namespace std; void...

Не освобождается память при выбросе исключений
это у меня находится в классе Add. Туда я добавляю элементы, перед этим проверяю, нет ли такого уже: try { ...

Правильно ли в данной программе освобождается память?
Доброго времени суток, написал учебную программу из книги Праты. В принципе задание не требует всего этого, но решил понабить руку и...

Не освобождается память в списке указателей на класс
#include &lt;iostream&gt; #include &lt;list&gt; using namespace std; class myClass{ private: int x; bool life; public: ...

Освобождается ли память выделенная под массив после вызова деструктора класса
Здравствуйте, изучаю ООП, вот у меня такой вопрос, вот мой код: #include &lt;iostream&gt; using namespace std; class myclass { ...


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

Или воспользуйтесь поиском по форуму:
79
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru