2013-04-19 17 views
11

Ich habe eine Tabelle, die ich mit Datenstrukturen implementiere. Ein wichtiger Block von meinem Code sieht wie folgt aus (h ist eine Datenstruktur, Tabelle ist eine Tabelle, die andere Strukturen speichert):Wie überprüft man, ob eine Struktur initialisiert ist?

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

Während mein Code ausgeführt wird, einige Tabelle [i] 's initialisiert wird, und manche nicht. Immer wenn ich meinen Code auf einer Tabelle [i] teste, die noch nicht initialisiert wurde, bekomme ich einen Valgrind-Fehler, der grundsätzlich besagt, dass ich nicht mit einem nicht initialisierten Array arbeiten kann.

Meine Frage ist, wie würde ich überprüfen, ob eine bestimmte h-> Tabelle [i] initialisiert wird oder nicht?

Antwort

7

Sie können nicht. Um das Problem zu beheben, initialisieren Sie die Struktur immer vor ihrer Verwendung (auch wenn die Initialisierung die Struktur auf einen bekannten "leeren"/"nicht-befüllten" Zustand setzt).

+0

+1 "calloc()" kommt mir für banale Init-Zuweisung in den Sinn, und nach diesen Zeigern zu beurteilen, würde wahrscheinlich helfen, wenn es richtig verwendet wird. – WhozCraig

+0

+1 für die Wahrheit und die Formulierung "* ..." blank "/" nicht bevölkert "state ... *", da dies sehr wohl von allen Nullen abweichen könnte! – alk

1

Wenn Sie Ihre Strukturen deklarieren setzen sie alle auf Null mit Calloc oder memset, dann vergleichen Sie später mit 0 oder NULL, um zu überprüfen, ob die Struktur nicht verwendet wird.

Verwandte Themen