2016-03-06 5 views
3

Есть ли способ проверить, был ли указатель инициализирован? У меня есть структура, которая cointain массива указателейЛучший способ проверить, инициализирован ли указатель

typedef struct foo 
{ 
    int* ptr1; 
    int* ptr2; 
    int* ptr2; 
    ... 
    int* ptr100; 
} 

, а затем мой код присвоение адресов для этих указателей (внутри цикла). Но перед назначением адреса я хочу проверить, содержит ли указатель уже адрес. Я знаю, что я могу initliazie каждый указатель с NULL, а затем проверить это с помощью:

if(ptr1 == NULL) 
    do something 

Но есть способ, чтобы написать что-то похож, но без инициализации ptr?

+0

Вы можете '' memset' в struct' сразу после его объявить. – stackptr

+0

№ Если структура выделена в стеке или куче, содержимое будет случайным. Если он находится в BSS (глобальный var), он будет инициализирован нолем, но я предполагаю, что он, вероятно, не будет в вашем случае. – slugonamission

+0

Это не массив указателей, это 100 указателей. – StoryTeller

ответ

7

Неинициализированная переменная может содержать любое значение. Поэтому невозможно выяснить, не переменна ли переменная, поскольку она может выглядеть как уже инициализированная переменная. Единственный способ убедиться, что инициализация переменной - явно написать значение (например, NULL), как вы уже отметили в своем вопросе.

+0

Это даже неопределенное тестирование поведения из неинициализированной переменной, поэтому любая попытка «проверить» его для неинициализации даст UB. –

1

У меня есть struct, который содержит массив указателей [...] есть способ, чтобы написать что-то подобное, но без инициализации ptr?

No.

Связанный: https://stackoverflow.com/a/19626617/694576

Смежные вопросы