2013-04-19 2 views
11

У меня есть таблица, которую я реализую с структурами данных. Важный блок моего кода выглядит следующим образом (ч представляет собой структуру данных, таблица представляет собой таблицу, в которой хранятся другие структуры):Как проверить, инициализирована ли структура?

(h->table[hash(key, h->size)] 

Хотя мой код работает, некоторые таблицы [я] s будет инициализирована, а некоторые нет. Всякий раз, когда я проверяю свой код на таблице [i], которая еще не была инициализирована, я получаю ошибку valgrind, которая в основном говорит, что я не могу работать с неинициализированным массивом.

Мой вопрос: как я могу проверить, инициализирована ли определенная h-> таблица [i] или нет?

ответ

7

Вы не можете. Чтобы исправить эту проблему, всегда инициализируйте структуру перед ее использованием (даже если вся инициализация задана, она устанавливается в известное состояние «пустое»/«не заполненное»).

+0

+1 'calloc()' пружины для мирского инициализации и, судя по этим указателям, вероятно, помогут, если их использовать правильно. – WhozCraig

+0

+1 для правды и формулировки «* ...« пустое »/« не заполненное »состояние ... *", так как это может быть отлично от всех нулей! – alk

1

Когда вы объявляете, что ваши структуры задали все значения нулю с помощью calloc или memset, затем сравните с 0 или NULL, чтобы проверить, не используется ли структура.

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