Frage

Beim Ausführen meines Programms erhalte ich die folgenden Fehler vom Boehm GC (mit definierter GC_Debug):

GC_check_heap_block: found smashed heap objects:
0x8ef1008 in or near object at 0x8ef1010(<smashed>, appr. sz = 29)
0x8ef1188 in or near object at 0x8ef1190(<smashed>, appr. sz = 29)
...

Das obige dauert ungefähr 20 Mal.

Seltsamerweise kann ich nichts mit dem Programm falsch finden, es tut das, was es soll, und stürzt nicht ab.

Ich kann mein Programm zusammenstellen, das die GC deaktiviert. Dann kann ich Valgrind damit laufen lassen, aber seltsamerweise findet Valgrind keine Probleme!

Könnte es ein Problem in Boehm GC sein - sollte ich es einfach ignorieren?

Hat jemand irgendwelche Ideen, wie man das effektiv debuggen?

Oder kann jemand genau erklären, was genau die obige Nachricht meint?

War es hilfreich?

Lösung

Um meine eigene Frage mehr als 3 Monate später zu beantworten ...

Ich habe versucht, jeden Zeiger in eine Datei zu protokollieren und mit Zeigern zu vergleichen, die die zerschlagene Warnung gaben. Das führte jedoch nirgendwo hin, die verdächtigen Zeiger kamen aus verschiedenen Zuweisungen in der gesamten Codebasis (keiner bestimmten Ort, der möglicherweise gebrochen wurde).

In der Zwischenzeit hat Valgrind ohne GC keine Fehler gemeldet, aber das heißt natürlich nicht, dass es noch keine möglichen Fehler gibt.

Ich dachte jedoch, ich würde es versuchen, wenn diese spezielle Version des GC vielleicht einen subtilen Fehler hat. Ich habe die neueste stabile Version GC 7.1 verwendet. Ich habe auf 7.2Alpha4 verbessert und das Problem verschwand!

Wenn jemand das durchläuft, hilft dies hoffentlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top