0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
1

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

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

Уважаемые программисты!!!!!
подскажите пожалуйста можно ли каким-либо способом проверить в условном операторе, выделена ли память под указатель
я пытался делать так:
C++
1
2
3
4
if (ptr == NULL)
{
    ptr = new ...//дальше выделяется память
}
но в этом случае выбрасывалось исключение типа access violation reading location типа того..
что мне делать скажите плиз!!!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2009, 16:16
Ответы с готовыми решениями:

Проверка, выделена ли память
Возможно ли проверить, указывает указатель на выделенную память, или нет.

Почему указатель теряет свои значения после выхода с метода, память выделена динамически
#include <iostream> using namespace std; void sqr( int* a, int length ); int main() {...

Ввод значения в переменную типа string, память под которую выделена динамически
Ребят, подскажите пожалуйста, как организовать ввод значения в переменную типа string, память под...

Функция, принимающая указатель и число байт и выделяющая память под указатель
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и...

13
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
27.05.2009, 17:08 2
Ты хоть исходник покажи. В общем случае так делать нельзя, потому как ptr у тебя может быть неинциализированным - т.е. там будут мусор, который не равен NULL, а ты в этом случае его будешь трактовать как нормальный указатель
0
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
27.05.2009, 17:40  [ТС] 3
а NULL тогда что такое??? мне непонятно.
Миниатюры
Проверка выделена ли память под указатель  
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
27.05.2009, 18:57 4
NULL это не на что не указывает
0
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
27.05.2009, 19:19  [ТС] 5
ясно а мою проблему можно как нибудь решить?
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
27.05.2009, 19:32 6
Так ты ещё проблему не рассказал, а уже спрашиваешь, можно ли её решить
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
27.05.2009, 19:33 7
Ты должен знать, что практика говорит: "после того, как удаляешь/освобождаешь что-то ставь указатель в NULL и будет тебе счастье". Даже если память под указатель не выделена, в область, все равно, можно писать/читать, если она валидна. Если ты сидишь под виндой, то там есть:
http://msdn.microsoft.com/en-u... S.85).aspx
http://msdn.microsoft.com/en-u... S.85).aspx
Как юзать - разберешься.
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,542
Записей в блоге: 30
27.05.2009, 19:37 8
Да неужто там никаких Watchpoint'ов нет?
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
27.05.2009, 19:53 9
это не проблема у тебя даже
тебе надо делать так
C
1
2
void* p=NULL;
p=malloc(size);
Добавлено через 6 минут 43 секунды
Перед использованием указателей им всегда нужно присваивать
значения. Если вы разыменовываете указатель, которому еще не
присвоено значение, то считанные из него данные могут представ-
лять собой случайные биты, а присваивание значения указываемому
элементу может затереть другие данные, вашу программу или даже
операционную систему. Это звучит несколько пугающе, но при опре-
деленной дисциплине такие вещи легко отслеживаются.
0
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
27.05.2009, 20:13  [ТС] 10
Mecid,
в том то и дело что в моей проге исользуется не "указатель которому еще не происвоено значение", а указатель под который не выделена память
проблема в том что мне нужно каким-то образом отслеживать обращения к указателю и, если он не инициализирован, то выделять память под него...
0
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.05.2009, 20:33 11
TimoshkaXXX, либо ты делаешь как Mecid сказал, либо никак, можно конечно проверять VirtualQuery выделена ли виртуальная страница под этот адрес(вообще бредовая идея, во-первых мусор, во вторых освобождается ли страница при освобождении памяти), но всеже ничего логичнее чем присваивать NULL при инициализации и освобождении
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
27.05.2009, 22:07 12
TimoshkaXXX,
вы определенно путаете инициализацию с выделением памяти.
Инициализация должна происходить при СОЗДАНИИ переменной/указателя.
А выделение памяти - в нужный момент.
Т.е., если вы создаете указатель(например, при создании класса), то ему СРАЗУ должен прискаиваться NULL.
А потом, при обращении, проверка: если NULL - то выделить память.
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
27.05.2009, 22:31 13
Цитата Сообщение от TimoshkaXXX Посмотреть сообщение
Mecid,
в том то и дело что в моей проге исользуется не "указатель которому еще не происвоено значение", а указатель под который не выделена память
проблема в том что мне нужно каким-то образом отслеживать обращения к указателю и, если он не инициализирован, то выделять память под него...
я чет не очень понял....может на коде покажешь
и ваще почитай про неинициализированные указатели
0
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 49
28.05.2009, 00:09  [ТС] 14
теперь кажется понятно что к чему спасибо!!!!!!)))))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2009, 00:09

Как правильно удалять выделенную память под указатель на указатель?
есть код #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> using...

Разделяемая память POSIX IPC как узнать, что память выделена и её уже можо использовать?
1. Описание проблемы: Две программы. Одна пишет в разделяемую память, другая читает. Из-под...

Можно ли так выделить память в куче под указатель на массив?
Здравствуйте Можно ли выделить память в куче под указатель на массив например так:? int...

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*В одномерном массиве, состоящем из n вещественных элементов, вычислить: - количество элементов...

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*Проверить, все ли строки матрицы содержат хотя бы один отрицательный элемент Если да, то...

По каким причинам память не может быть выделена динамически?
Что это могут быть за причины?


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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