Ungültiger Lesewert von Größe 8 - Valgrind + C

Valgrind meldet Fehler Invalid read of size 8 im folgenden code.

Ich habe ein array deklariert, wie,

struct symbol *st[PARSER_HASH_SIZE];

Wenn mein Programm initialisiert wird, werden alle Elemente in diesem array sind initailzied als 0.

memset(&st[0], 0, sizeof(st));

Mein Programm erzeugt Instanzen von struct symbol und fügt in dem oben genannten array abhängig von den hash-Wert. Also einige der Elemente in diesem array NULL sein, und andere werden Gültiger Wert.

Den folgenden code versucht zu löschen, die die zugewiesenen Elemente und valgrind meckert bei der Zeile
sym = st[i]; sym != NULL; sym = sym->next

struct symbol *sym = NULL;

/* cleaning the symbol table entries */
for(i = 0; i < PARSER_HASH_SIZE; i++) {
    for(sym = st[i]; sym != NULL; sym = sym->next) { /* <-- Valgrind complains here */
        free(sym);
    }
}

Ich versuche zu verstehen, der Grund für diesen Fehler.

Jede Hilfe wäre toll!

InformationsquelleAutor der Frage Navaneeth K N | 2010-10-27

Schreibe einen Kommentar