Valgrind meldet Fehler Invalid read of size 8
im folgenden Code.
Ich habe ein Array wie deklariert,
struct symbol *st[PARSER_HASH_SIZE];
Wenn mein Programm initialisiert wird, werden alle Elemente in diesem Array als 0 initialisiert.
memset(&st[0], 0, sizeof(st));
Mein Programm erstellt Instanzen von struct symbol
und fügt abhängig vom Hashwert in das obige Array ein. So wenige der Elemente in diesem Array sind NULL und andere sind gültige Werte.
Der folgende Code versucht, die zugewiesenen Elemente zu löschen, und Valgrind beschwert sich an 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, den Grund für diesen Fehler zu verstehen.
Jede Hilfe wäre toll!