Identifizieren Sie die Variable, die einen Speicherfehler verursacht

Also bin ich jetzt ein paar Mal auf einen seltsamen Fehler gestoßen und suche nach guten Anweisungen, um das Problem zu identifizieren.

Grundsätzlich sehe ich einen Seg-Fehler. Die Symptome sind wie folgt:

Es tritt nur auf, wenn sich das Programm im Release-Modus befindet, nicht im Debug-Modus.

Es erscheint als segfault und GDB sagt mir, dass es in ist_list_release/_free()/free() am Ende einer Funktion.

Program received signal SIGSEGV, Segmentation fault.

0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3

(gdb) bt

0 0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3

1 0xb032a464 in __free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3

2 0xb0329f7d in free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3

Ich verwende keinen dynamischen Speicher (außer dem, was in Eigen (oder anderen Bibliotheken) erscheint)

Ich kann alle lokalen Variablen kurz vor dem Ende der Funktion ausgeben, es ist also kein double free.

Als dies das letzte Mal passierte, war es ein Speicherfehler, der all diese Probleme behebt. Ärgerlicherweise kann ich das Problem diesmal nicht finden.

Was ich tun möchte, ist das folgende:

Dies wäre besonders nützlich: Wie kann ich diesen Fehler im Debug-Modus erzwingen, dann wäre GDB viel hilfreicher.Was ist der beste Weg, um herauszufinden, welcher kleine Mist das Problem verursacht.HINWEIS: Ich kann valgrind nicht verwenden, es funktioniert nicht auf dem von mir verwendeten Betriebssystem (QNX)

Jede Hilfe wäre toll.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage