valgrind - адрес равен 8 байтам перед блоком размером 16
У меня проблема с "перевариванием" выходных данных 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)
Что означает, что адрес равен "8 байтов перед выделенным блоком размером 16"?
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 ...]