2013-04-19 17 views
11

Mam tabelę, które implementuję ze struktur danych. Ważnym elementem mojego kodu wygląda następująco (h jest struktura danych, tabela jest tabelą, która przechowuje inne struktury):Jak sprawdzić, czy struktura została zainicjowana?

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

Chociaż mój kod działa, jakiś stół [i] 's zostanie zainicjowany, a niektóre nie. Ilekroć testuję mój kod na tabeli [i], która nie została jeszcze zainicjalizowana, dostaję błąd valgrind, który zasadniczo mówi, że nie mogę pracować z niezainicjowaną tablicą.

Moje pytanie brzmi, w jaki sposób sprawdzić, czy h-> table [i] jest inicjowany czy nie?

Odpowiedz

7

Nie możesz. Aby rozwiązać problem, zawsze inicjuj strukturę przed jej użyciem (nawet jeśli wszystkie inicjalizacje mają na celu ustawienie struktury na znany "pusty"/"niepopełniony" stan).

+0

+1 'calloc()' przychodzi na myśl przy zwykłej alokacji init, a sądząc po tych wskaźnikach, prawdopodobnie pomógłby, gdyby był właściwie używany. – WhozCraig

+0

+1 za prawdę i sformułowanie "* ..." puste "/" nie zaludnione "stan ... *", ponieważ może to być bardzo różne od wszystkich zer! – alk

1

Po zadeklarowaniu swoich struktur ustaw je wszystkie na zero za pomocą calloc lub memset, a następnie porównaj z 0 lub NULL, aby sprawdzić, czy struktura nie jest używana.

Powiązane problemy