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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

IsBadPtr - C++

04.12.2012, 09:03. Просмотров 1139. Ответов 24
Метки нет (Все метки)

Почему то code blocks не знает такой функции, а гугл предлагает объявить такой макрос для проверки на равенство NULL. Эта функция не существует? Если указатель не равен NULL, можно ли под Windows проверить, действительно ли указывает он на выделенную память?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
04.12.2012, 11:42     IsBadPtr #2
taras atavin, В стандарте она точно не существует. Да и вообще это невозможно проверить в релиз-режиме.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 15:38  [ТС]     IsBadPtr #3
В стандарте чего?
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.12.2012, 15:52     IsBadPtr #4
написать свой аллокатор
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:03  [ТС]     IsBadPtr #5
И свою ось?
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.12.2012, 16:08     IsBadPtr #6
нет. перегрузить глобальные new / delete. правда будет следить только за вновь собираемым кодом. все что за пределами не поймает. а зачем вам такая хорошая функция?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:14  [ТС]     IsBadPtr #7
Цитата Сообщение от vxg Посмотреть сообщение
нет. перегрузить глобальные new / delete. правда будет следить только за вновь собираемым кодом.
Память выделяет ось.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
04.12.2012, 16:23     IsBadPtr #8
Цитата Сообщение от taras atavin Посмотреть сообщение
В стандарте чего?
В стандарте языка.

Цитата Сообщение от taras atavin Посмотреть сообщение
действительно ли указывает он на выделенную память?
Указатель это простая переменная, не обязательно выделять память, чтоб он куда то указывал. Используйте класс умных указателей.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:27  [ТС]     IsBadPtr #9
Цитата Сообщение от Toshkarik Посмотреть сообщение
В стандарте языка.
А какое отношение язык имеет к API и системе?
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.12.2012, 16:27     IsBadPtr #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Память выделяет ось
я и не претендую. я в том смысле что можно сделать выделение памяти в вашем коде проходящим через одни "ворота" где будут фиксироваться выданные адреса
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:28  [ТС]     IsBadPtr #11
Цитата Сообщение от Toshkarik Посмотреть сообщение
не обязательно выделять память, чтоб он куда то указывал.
Если указателю присвоен другой валидный указатель, или адрес элемента массива, или именованной переменной, то память по этому адресу выделена раньше.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
04.12.2012, 16:29     IsBadPtr #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Память выделяет ось.
И что? Запрашивает то программа память. ОС не может просто так взять и отобрать кусок памяти, запрошенный программой. Программа сама должна управлять своими ресурсами. Этим и занимается allocator.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:34  [ТС]     IsBadPtr #13
Цитата Сообщение от vxg Посмотреть сообщение
я и не претендую. я в том смысле что можно сделать выделение памяти в вашем коде проходящим через одни "ворота" где будут фиксироваться выданные адреса
Оболочка над аллокатором - не аллокатор. И библиотека к ней врядли достучится.

Добавлено через 3 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
ОС не может просто так взять и отобрать кусок памяти, запрошенный программой. Программа сама должна управлять своими ресурсами. Этим и занимается allocator.
Ты ещё из доса не выбрался? В современных осях нельзя просто так взять и монополизировать всю память, это глобальный ресурс и распределяет его система. Кроме того, объясни, каким образом один процесс достучится к оболочке над аллокатором из другого, библиотека к оболочке из прилады, или прилада к библиотечной. Ведь валидация указателя имеет смысл только при взаимодействии нескольких программ.
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.12.2012, 16:37     IsBadPtr #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Оболочка над аллокатором - не аллокатор
согласен, поэтому пишу что это "как бы..." будет кататься только внутри вашего кода.

Не по теме:

и все же: зачем??? мне от чего то кажется что задача которая захотела вызвать такую функцию что то делает неверно

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:38  [ТС]     IsBadPtr #15
Цитата Сообщение от vxg Посмотреть сообщение
"как бы..."
Где? Ссылку в студию.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
04.12.2012, 16:39     IsBadPtr #16
taras atavin, Вы о чем вообще? ОС не может забрать память, которая уже была выделена программе оператором new, если программа явно не освободила ресурс оператором delete. К примеру, Вы запросили 100 мегабайт, ОС их выделила, и теперь они принадлежат программе, ОС не сможет их забрать просто так обратно. И не важно, используются они в программе или нет.
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.12.2012, 16:40     IsBadPtr #17
ссылку на что?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 16:41  [ТС]     IsBadPtr #18
Ты ещё и упираешься? Памятью ведает ось.

Добавлено через 17 секунд
Цитата Сообщение от vxg Посмотреть сообщение
ссылку на что?
На "как бы".
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.12.2012, 16:47     IsBadPtr #19
вот когда-то столкнувшись с утечками памяти пытался нагородить вот такой велосипед. в памяти не отложилось допилил ли я его до конца. в любом случае он не будет ловить выделение памяти вне компилируемого кода, выделение памяти через alloc, указатели на память не являющуюся динамически выделенной и вызовы с явным указанием родного метода new. плюнул и поставил галочку в настройках проекта напротив CodeGuard - собранный таким образом проект быстро стал меня информировать о том где был лишний delete или доступ по некорректному адресу
Вложения
Тип файла: rar mem_tracker.rar (738 байт, 5 просмотров)
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.12.2012, 17:10     IsBadPtr #20
Попробовать обратиться к памяти и перехватить SEH-исключение Access Violation?
Yandex
Объявления
04.12.2012, 17:10     IsBadPtr
Ответ Создать тему
Опции темы

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