2015-04-21 4 views
7

Ich habe ein Problem mit "Digg" Valgrind-Ausgabe. Hier ist ein Ausschnitt: Valgrind - Adresse ist 8 Bytes vor einem Block der Größe 16 alloc'd

==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) 

Was bedeutet es, dass die Adresse „8 Bytes vor einem Block der Größe 16 alloc'd“?

+0

anzeigen entsprechenden Code bitte. –

Antwort

16

Das bedeutet, dass Valgrind einen Speicherblock für Ihr Programm gefunden hat (über malloc() o.ä.), und dass Sie versuchen, auf die Adresse zuzugreifen, die vorher 8 Bytes lang ist.

Kurz gesagt, ist dies ein Array Out of Bounds Fehler, mit Ihnen den Zugriff auf Daten vor die tatsächlichen Array-Daten versuchen

Ein incorrect write bedeutet, dass Sie einen Wert etwas in dieser Daten- zuweisen Segment. Zum Beispiel word.length = 4

Hier tun, ist die Aufteilung der valgrind des ouput:

==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

Danke, es stellte sich heraus, dass der Zugriff auf das Array mit '-1' als Index diesen Fehler verursachte. – qiubit

Verwandte Themen