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);
}
}
Я пытаюсь понять причину этой ошибки.
Любая помощь будет отличной!