Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550

Свободна ли память?

03.06.2010, 08:56. Показов 1559. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует ли способ определить на что указывает указатель - мусор (свободная память) или занятая память?
C++
1
2
3
4
5
int* a = new int;
*a = 3;
delete a;
if ( check(a) ) // ???
*a = 6;
Пример натянутый конечно, на деле - объекты имеют указатели на ресурсы, которые по разным причинам могут быть потеряны вне их контроля. Если ресурс был потерян объектом, нужно вновь вызвать функцию загрузки. Конечно это все можно контролировать "над" объектом, но вдруг можно сделать все проще :-))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2010, 08:56
Ответы с готовыми решениями:

Свободна IT вакансия сетевого администратора, торопитесь!)))
собственно сабж.

Вероятность того, что в библиотеке книга свободна, равна 0,35
Вероятность того, что в библиотеке необходимая студентке книга свободна равна 0,35. Определить вероятность того, что: а) студентке...

Разделил диск С но вторая половина стала свободна и не как не реагирует.что делать?
На диске С была загружена винда 7.я решил переустановить и сделал с диска С ещё раздел куда закинул винду.Но теперь оставшееся место 39гиг...

11
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.06.2010, 11:52
Нет.
Существует только одно предопределенное значение - NULL. Только NULL-указатель гарантированно не указывает ни на какой объект.
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
03.06.2010, 14:07  [ТС]
Ну почему же, допустим если самому контролировать выделения памяти то можно записывать какие участки заняты и потом проверять. По сути Windows имеет такие таблицы, тогда может средствами WinAPI?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.06.2010, 14:13
Если самому контролировать выделения памяти - то чем это отличается от "это все можно контролировать "над" объектом" ? В чем упрощение?
А что касается подхода собственно Windows и WinAPI, то выделение и удаление памяти осуществляет CRT - C Run-Time Library, и сама Windows к этому процессу не имеет отношения. Функции WinAPI типа VirtualAlloc() передают виртуальную память очень большими "кусками" менеджеру памяти СRT, который уже "нарезает" ее на мелкие кусочки нужного размера и распределяет их объектам.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
03.06.2010, 14:18
Цитата Сообщение от insideone Посмотреть сообщение
Ну почему же, допустим если самому контролировать выделения памяти то можно записывать какие участки заняты и потом проверять
Проверяй. При условии, что АБСОЛЮТНО ВСЕ обращения в память пройдут через твои руки. Что нереально.

Цитата Сообщение от insideone Посмотреть сообщение
По сути Windows имеет такие таблицы, тогда может средствами WinAPI?
Операционная система имеет лишь описание страниц, замапированных для данного процесса. Что по ним записано - это просто технически нельзя определить.

Эта проблема встала уже очень давно и многие компании пытались её решить через всяческие тэгированные и дескрипторные архитектуры. Многие из этих архитектур были созданы (либо на бумаге, либо в виде реального железа), по ним защитили множество кандидатских и докторских, после чего успешно всё отправлено на свалку. Как минимум потому, что очень много реального софта в процессе работы обращаются к неинициализированным участкам данных или некорректноработают с указателями, но это фатальным не является (типа прочитали неинициализировнное значение, но не использовали).
1
 Аватар для Manjak
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
03.06.2010, 14:18
Напрямую, по моему, никак не выйдет. Можно конечно извращаться и например следить за этим блоком памяти(а там уже решать используется ли память или про нее забыли, я бы такое не писал) на предмет записи и тд, но это будет код, чтобы побаловаться да и только
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
03.06.2010, 15:03
Хотя что-то я загнул. Речь идёт не об инициализированных данных, а о выделенной и невыделенной памяти. Проблема решается тем, что ты пишешь свой собственный менеджер памяти и ВСЕ вызовы по выделению памяти заруливаешь на свой менеджер. Я не помню, как это правильно сделать по синтаксису, но Си++ повзволяет в new указать конкретную память. Только фо факту это оченб быстро надоест, потому как если где-то забудешь и память выделишь любым другим способом - то у тебя всё накроется медным тазом
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.06.2010, 15:10
На самом деле, могу дать коллеге insideone полезный совет - использовать идиому "умных указателей" (которая уже официально войдет в Стандарт C++11, а неофициально уже поддерживается std::tr1) и не ломать голову над этой проблемой.
Поверь, в разработке ПО есть гораздо более существенные проблемы, над которыми действительно стоит ломать голову и тратить время, чем рутинное управление памятью ....
1
 Аватар для Manjak
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
03.06.2010, 15:20
Я тут пошевелил опилками... если нужно выделить память именно в этот блоке то пробуем выделить. Если занято - смещаемся до свободного места и там выделяем.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,974
03.06.2010, 15:20
Ещё хорошей привычкой было бы сразу после
delete some_pointer;
дописывать
some_pointer = NULL;
0
 Аватар для Manjak
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
03.06.2010, 15:26
Можно память вообще не декомитить, а держать про запас

ПС. "Я не жадный, я домовитый"
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
03.06.2010, 20:05  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
использовать идиому "умных указателей" (которая уже официально войдет в Стандарт C++11, а неофициально уже поддерживается std::tr1)
Спасибо Уж и раньше читал, но видимо не внимательно, сейчас присмотрелся по лучше

Вообще на самом деле вопрос у меня встал не критичный, просто DirectX при Alt-TAB из полноэкранного приложения некоторые свои COM ресурсы освобождает (а выделял то я) они становятся битые... тут пожалуй и умные указатели не помогут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2010, 20:05
Помогаю со студенческими работами здесь

Дорожка разделена на клетки. Для каждой клетки указано, свободна ли она. Можно ли замостить дорогу плиткой 1x2
Моих знаний хватило только на то чтобы заполнить единицами и нулями динамичный массив с этими размерами, можете помочь с алгоритмом...

Азы: статическая память, динамическая память, автоматическая память
столько раз приходистя возвращаться к началу, и все благодаря моим преподавателям, которые не давали задавать вопросы на парах, а если это...

Когда ставишь память в DIMM2, при этом приходится память переворачивать
Помогите мне. При добавление памяти в столкнулся с проблемой. Когда память стоит в DIMM1 (фото 1) всё работает хорошо. Когда ставишь эту...

Dll на C++ кушает память, как правильно удалять и освобождать память?
Добрый день, совсем мало опыта в программировании на C++, помогите пожалуйста знатоки С++. Есть Dll, типа wrapper для библиотеки...

Внешняя память PIC: как нарастить внутреннюю память данных?
Я только начал разбираться с ПИКами и пока не все понимаю. Мне нужно организовать систему сбора и обработки информации с газовых датчиков....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru