簡體   English   中英

C:Valgring警告“大小為8的無效寫入/讀取”並關閉syscall

[英]C : Valgring warns about “Invalid write/read of size 8” & close syscall

我正在用valgrind測試我的二進制文件,並且收到許多這樣的警告:

Invalid write of size 8
==7414==    at 0x402AAE: list_create_node (simple_list.c:53)
==7414==    by 0x40267E: list_add_elem_at_back (simple_list2.c:21)
==7414==    by 0x401C8A: parse (is_valid2.c:31)
==7414==    by 0x40246C: ko_parse (main.c:53)
==7414==    by 0x40255B: ko (main.c:74)
==7414==    by 0x4025E1: main (main.c:96)
==7414==  Address 0x6fe52d8 is 0 bytes after a block of size 8 alloc'd
==7414==    at 0x4C277AB: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==7414==    by 0x402A75: list_create_node (simple_list.c:50)
==7414==    by 0x40267E: list_add_elem_at_back (simple_list2.c:21)
==7414==    by 0x401C8A: parse (is_valid2.c:31)
==7414==    by 0x40246C: ko_parse (main.c:53)
==7414==    by 0x40255B: ko (main.c:74)
==7414==    by 0x4025E1: main (main.c:96)

我看到有很多關於此的文章,但是我找不到我的代碼中的問題所在:

t_node          *list_create_node(char *element)
{
  t_node        *node;

  if ((node = malloc(sizeof(t_node *))) == NULL)
    return (NULL);
  if ((node->value = strdup(element)))
    node->next = NULL; //// line 53 from simple_list.c
  return (node);
}

難道我做錯了什么?

Valgrind還警告閱讀...並且:

==7415== Warning: invalid file descriptor 1024 in syscall close()

我的代碼中有一個close()位置,但是即使在我對其進行注釋時,該消息仍會一直顯示。 這是為什么?

你要malloc你的指針指向,而不是指針本身的大小尺寸。 即:更改

(node = malloc(sizeof(t_node *)))

(node = malloc(sizeof(t_node)))

或更好:

(node = malloc(sizeof *node))

然后,如果您決定更改node的類型,則不必更改malloc -call。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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