【问题标题】:valgrind - address is 8 bytes before a block of size 16 alloc'dvalgrind - 地址在分配大小为 16 的块之前的 8 个字节
【发布时间】:2015-04-21 15:37:16
【问题描述】:

我在“消化”valgrind 输出时遇到问题。这是一个sn-p:

==15145== Invalid write of size 8
==15145==    at 0x40168E: split_node_at_letter (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x4018E7: pass_word_further (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x401A35: insert_word (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x401BD5: main (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==  Address 0x52237d8 is 8 bytes before a block of size 16 alloc'd
==15145==    at 0x4C29BCF: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==15145==    by 0x401063: add_to_trie_word_list (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x40173B: pass_word_further (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x40183D: pass_word_further (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x401906: pass_word_further (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x401A35: insert_word (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
==15145==    by 0x401BD5: main (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)

地址是“分配大小为 16 的块之前的 8 个字节”是什么意思?

【问题讨论】:

  • 请显示对应的代码。

标签: c valgrind


【解决方案1】:

这意味着 Valgrind 检测到您为您的程序分配的一块内存(通过malloc() 或类似方式),并且您尝试访问该地址之前的 8 个字节。

简而言之,这是一个Array Out of Bounds错误,您尝试实际数组数据之前访问数据

incorrect write 表示您为此数据段中的某些内容分配了一个值。比如做word.length = 4

这是 valgrind 输出的细分:

==15145== Invalid write of size 8
             //This is the function doing the incorrect accessing
==15145==    at 0x40168E: split_node_at_letter (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)
           [... stack trace ...]

                //This is the address you are trying to access
==15145==  Address 0x52237d8 is 8 bytes before a block of size 16 alloc'd
==15145==    at 0x4C29BCF: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)

             //This is the function that alloc'd the 'block of size 16' (calling malloc as shown in the above line)
==15145==    by 0x401063: add_to_trie_word_list (in /home/pgolinski/Dokumenty/Programowanie/git/dictionary/trii)

           [... stack trace ...]

【讨论】:

  • 谢谢,事实证明它使用 -1 作为索引访问数组导致了这个错误。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2023-03-23
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 2012-06-07
  • 2015-03-17
  • 1970-01-01
相关资源
最近更新 更多