我遇到了"消化"valgrind输出的问题.这是一个片段:
==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)
Run Code Online (Sandbox Code Playgroud)
地址是"大小为16的块之前的8个字节"是什么意思?
Ere*_*ith 18
这意味着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 ...]
Run Code Online (Sandbox Code Playgroud)