簡體   English   中英

大小為8 C + valgrind的讀取無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM