powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что означает данное выражение на C
7 сообщений из 32, страница 2 из 2
Что означает данное выражение на C
    #39000337
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griSvalПочему?
А как по-твоему: почему в ячейке ОЗУ заряд должен самопроизвольно рассасываться только
потому, что к ней больше никто не обращается?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что означает данное выражение на C
    #39000341
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griSvalА почему 500 почему не ноль.
Потому что никто не обещал обнулять память при освобождении. Что там было, то и осталось.
griSvalДля меня это нонсенс память же освобождена почему она сохраняется вот в чем вопрос.
Это на усмотрение менеджера памяти ОС. Работает так как быстрее: может совсем освободить, а может просто пометить память как свободную и использовать при следующем выделении памяти.
...
Рейтинг: 0 / 0
Что означает данное выражение на C
    #39000397
griSval
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovА как по-твоему: почему в ячейке ОЗУ заряд должен самопроизвольно рассасываться только
потому, что к ней больше никто не обращается?

Да хорошо, никто не обращается тогда, еще один вопрос? Если адрес ячейки никуда не девается, указатель все так же на нее ссылается и значение не обнуляется, как понять освободилась память или нет. Ведь точно так же мы можем просто присвоить *pn иное значение не освобождая память. Зачем оно вообще нужно?

З.Ы.: Я в принципе догадываюсь, но просто хочется знать, что другие думают по этому поводу.
...
Рейтинг: 0 / 0
Что означает данное выражение на C
    #39000418
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griSvalкак понять освободилась память или нет.
Вызвал free() или delete (в зависимости от того как выделял) и считай что память освободилась. Для твоей проги этой памяти больше не существует. А то что у тебя есть указатель на эту память, то по-хорошему его на обнулить чтобы гарантированно получить исключение если случайно где-то в коде по нему обратишься.
Код: plaintext
1.
2.
3.
4.
...
free(pn);
pn = NULL;
...


griSvalЗ.Ы.: Я в принципе догадываюсь, но просто хочется знать, что другие думают по этому поводу.
Что-то сомневаюсь что догадываешься.
Читай книжки про организацию виртуальной памяти. Там все расписано. Например: Джеффри Рихтер "Windows для профессионалов"

Запусти и посмотри что будет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	int* p1 = (int*)malloc(sizeof(int));
	*p1 = 123;
	printf("%p %d\n", p1, *p1);
	free(p1);
	int* p2 = (int*)malloc(sizeof(int));
	*p2 = 345;
	printf("%p %d\n", p2, *p2);

У меня такой результат00343198 123
00343198 345
...
Рейтинг: 0 / 0
Что означает данное выражение на C
    #39000427
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griSvalкак понять освободилась память или нет
А как ты вообще себе представляешь "свободное состояние" ячейки ОЗУ, которая может хранить
только нуль и единицу?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что означает данное выражение на C
    #39000656
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор:
Так, все вопросы ТУТ прекратили, нужно задать вопрос -- создавайте новую тему .

Тему закрываю.
...
Рейтинг: 0 / 0
Что означает данное выражение на C
    #39000665
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griSvalDimitry SibiryakovА как по-твоему: почему в ячейке ОЗУ заряд должен самопроизвольно рассасываться только
потому, что к ней больше никто не обращается?

Да хорошо, никто не обращается тогда, еще один вопрос? Если адрес ячейки никуда не девается, указатель все так же на нее ссылается и значение не обнуляется, как понять освободилась память или нет. Ведь точно так же мы можем просто присвоить *pn иное значение не освобождая память. Зачем оно вообще нужно?

З.Ы.: Я в принципе догадываюсь, но просто хочется знать, что другие думают по этому поводу.

Никак.

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

Но в С/С++ в общем смысле невозможно понять, занята ли какая-то ячейка выделенной памяти чем-то, или свободна.

Если удаляешь память, а какие-то указатели на неё всё ещё ссылаются, то они будут ссылаться на невалидную память и при использовании таких указателей можно в худшем случае затереть значения других переменных, а в лучшем -- повредить хип (в лучшем -- потому что ошибка сразу выявится).

Поэтому главный принцип управления памятью -- при удалении памяти все ссылки на неё должны очищаться.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что означает данное выражение на C
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]