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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie die Befreiung der
sym
dann versuchen, Zugriff auf einen Wert aus die (jetzt freigegebenen) Daten:sym->next
.Möchten Sie wahrscheinlich so etwas wie dies für die innere Schleife:
InformationsquelleAutor der Antwort ZoogieZork
auch seine nicht klar, ob Sie array soll enthalten Strukturen oder Zeiger auf Strukturen
sagt ein array von Pointern auf structs. Aber dann sagen Sie
"Wenn mein Programm initialisiert wird, werden alle Elemente in diesem array sind initailzied als 0."
Dies ist die Behandlung der Einträge wie Strukturen
klar array
InformationsquelleAutor der Antwort pm100