Lỗi báo cáo valgrind Invalid read of size 8
trong mã sau.Đọc không hợp lệ kích thước 8 - Valgrind + C
Tôi có một mảng được khai báo như thế nào,
struct symbol *st[PARSER_HASH_SIZE];
Khi chương trình của tôi được khởi tạo, tất cả các yếu tố trong mảng này được initailzied như 0.
memset(&st[0], 0, sizeof(st));
chương trình của tôi tạo ra các trường hợp struct symbol
và chèn vào mảng trên tùy thuộc vào giá trị băm. Vì vậy, rất ít các phần tử trong mảng này sẽ là NULL và các phần tử khác sẽ là giá trị hợp lệ.
Các mã sau cố gắng để xóa các mục được phân bổ và valgrind phàn nàn tại dòng, 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);
}
}
Tôi cố gắng để hiểu được lý do cho lỗi này.
Mọi trợ giúp sẽ tuyệt vời!
Nó có nghĩa là để chứa con trỏ đến cấu trúc. Bạn có thể cho tôi biết cách khởi tạo đúng cách không? –