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

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

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

IsBadPtr - C++

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

Почему то code blocks не знает такой функции, а гугл предлагает объявить такой макрос для проверки на равенство NULL. Эта функция не существует? Если указатель не равен NULL, можно ли под Windows проверить, действительно ли указывает он на выделенную память?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,437
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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,437
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
1140 / 857 / 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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,437
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
1140 / 857 / 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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,437
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 Посмотреть сообщение
"как бы..."
Где? Ссылку в студию.
Yandex
Объявления
04.12.2012, 16:38     IsBadPtr
Ответ Создать тему
Опции темы

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