Valgrind сообщает об ошибке Invalid read of size 8
в следующем коде.
У меня есть объявленный массив,
struct symbol *st[PARSER_HASH_SIZE];
Когда моя программа инициализирована, все элементы в этом массиве инициализируются как 0.
memset(&st[0], 0, sizeof(st));
Моя программа создает экземпляры struct symbol
и вставляет в указанный массив в зависимости от хэш-значения. Таким образом, мало элементов из этого массива будет NULL, а другие будут действительными.
Следующий код пытается удалить выделенные элементы, и valgrind жалуется на строку,
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);
}
}
Я пытаюсь понять причину этой ошибки.
Любая помощь будет замечательной!