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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.85
TimoshkaXXX
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
#1

Проверка выделена ли память под указатель - C++

27.05.2009, 16:16. Просмотров 7742. Ответов 13
Метки нет (Все метки)

Уважаемые программисты!!!!!
подскажите пожалуйста можно ли каким-либо способом проверить в условном операторе, выделена ли память под указатель
я пытался делать так:
C++
1
2
3
4
if (ptr == NULL)
{
    ptr = new ...//дальше выделяется память
}
но в этом случае выбрасывалось исключение типа access violation reading location типа того..
что мне делать скажите плиз!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2009, 16:16     Проверка выделена ли память под указатель
Посмотрите здесь:

Ввод значения в переменную типа string, память под которую выделена динамически C++
Указатель, выделение памяти под него C++
Выделение памяти под указатель C++
C++ Как получить ссылку на указатель или указатель на указатель в массиве?
Программа сначала перезаписывает 100 байт, на которые указывает указатель, а затем освобождает память C++
C++ Как передвигать указатель чтобы выделить память под новый элемент и добавить новый элемент в массив?
По каким причинам память не может быть выделена динамически? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,769
Записей в блоге: 26
27.05.2009, 17:08     Проверка выделена ли память под указатель #2
Ты хоть исходник покажи. В общем случае так делать нельзя, потому как ptr у тебя может быть неинциализированным - т.е. там будут мусор, который не равен NULL, а ты в этом случае его будешь трактовать как нормальный указатель
TimoshkaXXX
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
27.05.2009, 17:40  [ТС]     Проверка выделена ли память под указатель #3
а NULL тогда что такое??? мне непонятно.
Миниатюры
Проверка выделена ли память под указатель  
Mecid
 Аватар для Mecid
678 / 227 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
27.05.2009, 18:57     Проверка выделена ли память под указатель #4
NULL это не на что не указывает
TimoshkaXXX
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
27.05.2009, 19:19  [ТС]     Проверка выделена ли память под указатель #5
ясно а мою проблему можно как нибудь решить?
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,769
Записей в блоге: 26
27.05.2009, 19:32     Проверка выделена ли память под указатель #6
Так ты ещё проблему не рассказал, а уже спрашиваешь, можно ли её решить
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.05.2009, 19:33     Проверка выделена ли память под указатель #7
Ты должен знать, что практика говорит: "после того, как удаляешь/освобождаешь что-то ставь указатель в NULL и будет тебе счастье". Даже если память под указатель не выделена, в область, все равно, можно писать/читать, если она валидна. Если ты сидишь под виндой, то там есть:
http://msdn.microsoft.com/en-us/libr...16(VS.85).aspx
http://msdn.microsoft.com/en-us/libr...13(VS.85).aspx
Как юзать - разберешься.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,769
Записей в блоге: 26
27.05.2009, 19:37     Проверка выделена ли память под указатель #8
Да неужто там никаких Watchpoint'ов нет?
Mecid
 Аватар для Mecid
678 / 227 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
27.05.2009, 19:53     Проверка выделена ли память под указатель #9
это не проблема у тебя даже
тебе надо делать так
C
1
2
void* p=NULL;
p=malloc(size);
Добавлено через 6 минут 43 секунды
Перед использованием указателей им всегда нужно присваивать
значения. Если вы разыменовываете указатель, которому еще не
присвоено значение, то считанные из него данные могут представ-
лять собой случайные биты, а присваивание значения указываемому
элементу может затереть другие данные, вашу программу или даже
операционную систему. Это звучит несколько пугающе, но при опре-
деленной дисциплине такие вещи легко отслеживаются.
TimoshkaXXX
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
27.05.2009, 20:13  [ТС]     Проверка выделена ли память под указатель #10
Mecid,
в том то и дело что в моей проге исользуется не "указатель которому еще не происвоено значение", а указатель под который не выделена память
проблема в том что мне нужно каким-то образом отслеживать обращения к указателю и, если он не инициализирован, то выделять память под него...
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
27.05.2009, 20:33     Проверка выделена ли память под указатель #11
TimoshkaXXX, либо ты делаешь как Mecid сказал, либо никак, можно конечно проверять VirtualQuery выделена ли виртуальная страница под этот адрес(вообще бредовая идея, во-первых мусор, во вторых освобождается ли страница при освобождении памяти), но всеже ничего логичнее чем присваивать NULL при инициализации и освобождении
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
27.05.2009, 22:07     Проверка выделена ли память под указатель #12
TimoshkaXXX,
вы определенно путаете инициализацию с выделением памяти.
Инициализация должна происходить при СОЗДАНИИ переменной/указателя.
А выделение памяти - в нужный момент.
Т.е., если вы создаете указатель(например, при создании класса), то ему СРАЗУ должен прискаиваться NULL.
А потом, при обращении, проверка: если NULL - то выделить память.
Mecid
 Аватар для Mecid
678 / 227 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
27.05.2009, 22:31     Проверка выделена ли память под указатель #13
Цитата Сообщение от TimoshkaXXX Посмотреть сообщение
Mecid,
в том то и дело что в моей проге исользуется не "указатель которому еще не происвоено значение", а указатель под который не выделена память
проблема в том что мне нужно каким-то образом отслеживать обращения к указателю и, если он не инициализирован, то выделять память под него...
я чет не очень понял....может на коде покажешь
и ваще почитай про неинициализированные указатели
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2009, 00:09     Проверка выделена ли память под указатель
Еще ссылки по теме:

C++ Как правильно удалять выделенную память под указатель на указатель?
C++ Три непонятности: память в union, указатель на функцию и ->
C++ Сырой указатель на память выделенную через new[]
Выделение памяти под указатель C++
Почему указатель теряет свои значения после выхода с метода, память выделена динамически C++

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

Или воспользуйтесь поиском по форуму:
TimoshkaXXX
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
28.05.2009, 00:09  [ТС]     Проверка выделена ли память под указатель #14
теперь кажется понятно что к чему спасибо!!!!!!)))))
Yandex
Объявления
28.05.2009, 00:09     Проверка выделена ли память под указатель
Ответ Создать тему
Опции темы

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