[英]Invalid read of size 8 C + valgrind
Valgrind正在輸出此
==7558== Invalid read of size 8
==7558== at 0x109049: delete_all_employees (emp.c:300)
==7558== by 0x108BCB: main (rpt.c:37)
==7558== Address 0x5232760 is 0 bytes inside a block of size
40 free'd
==7558== at 0x4C30D3B: free (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7558== by 0x108E15: free_emp (emp.c:175)
==7558== by 0x109044: delete_all_employees (emp.c:299)
==7558== by 0x108BCB: main (rpt.c:37)
==7558== Block was alloc'd at
==7558== at 0x4C31B25: calloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7558== by 0x108DAE: new_emp (emp.c:143)
==7558== by 0x108C73: add_employee (emp.c:65)
==7558== by 0x108FB9: load_employees (emp.c:272)
==7558== by 0x108BA2: main (rpt.c:28)
而它調用錯誤的功能是這個
void delete_all_employees( void ) {
Employee *emp = employees;
while( emp ) {
free_emp(emp);
emp = emp->next;
}
}
我不知道為什么這會導致我的讀取大小為8
您可以釋放emp
, 然后嘗試從中讀取。 這就是valgrind所抱怨的。
在增加emp
之前,將指針保存為要釋放的指針,然后釋放temp。
while( emp ) {
Employee *tmp = emp;
emp = emp->next;
free_emp(tmp);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.