Указатель назначен или нет в C? - PullRequest
0 голосов
/ 03 июня 2010

Как мне написать оператор if, который сообщает программе, назначен или нет указатель?

НЕПРАВИЛЬНЫЙ пример

if (*badpdr[0]==0);

Ответы [ 5 ]

6 голосов
/ 03 июня 2010

Вы имеете в виду if (badptr==NULL)?

Обратите внимание, что вы должны изначально установить указатель в NULL, когда вы его определяете или когда вы «отменяете его» (например, вы удаляете объект, на который он ссылается). В противном случае он будет содержать мусор, и этот тест не будет выполнен, поскольку значение не будет 0.

Вы также можете сделать сравнение с 0 вместо NULL, для SO уже достаточно аргументов, что является правильной формой, поэтому я не буду их повторять.

3 голосов
/ 03 июня 2010
char *ptr=NULL;

инициализировать указатель на NULL; затем вы можете проверить, является ли он NULL, чтобы убедиться, что он действителен, прежде чем пытаться его обработать.

1 голос
/ 12 декабря 2011

В C++, когда int переменные не назначены, они имеют начальное значение 2686392!

0 голосов
/ 10 января 2016

Вы можете использовать макрос, который выполняет свою работу:

#define NP_CHECK(ptr) \
    { \
        if (ptr == NULL) { \
            fprintf(stderr, "%s:%d NULL POINTER: %s\n", \
                __FILE__, __LINE__, #ptr); \
            exit(-1); \
        } \
    } \
0 голосов
/ 03 июня 2010

Вы можете установить обработчик сигнала для SIGSEGV и затем попытаться разыменовать указатель - если вы оказались внутри обработчика сигнала, указатель не был назначен (или указывает на недопустимый адрес памяти, что в принципе то же самое)

Однако могут быть ситуации, когда неназначенный указатель указывает на действительный адрес, принадлежащий пространству памяти процесса - в этом случае SIGSEGV не будет поднято.

...