Zidentyfikuj zmienną powodującą błąd pamięci

Kilkakrotnie natknąłem się na dziwny błąd i szukam dobrych wskazówek, aby zidentyfikować problem.

Zasadniczo to, co widzę, to błąd seg. Objawy są następujące:

Występuje tylko wtedy, gdy program jest w trybie zwolnienia, a nie w debugowaniu.

Pojawia się jako segfault, a GDB mówi mi, że jest_list_release/_free()/free() na końcu funkcji.

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

Nie używam żadnej pamięci dynamicznej (z wyjątkiem tego, co może pojawić się w Eigen (lub innych bibliotekach)

Mogę wydrukować wszystkie lokalne zmienne tuż przed końcem funkcji, więc nie jest podwójnie wolny.

Ostatnim razem, gdy to się stało, był to błąd pamięci, który pasuje do wszystkich tych problemów. Irytująco tym razem nie mogę znaleźć problemu.

To, co chciałbym zrobić, to:

Byłoby to bardzo przydatne: jak mogę wymusić ten błąd w trybie debugowania, wtedy GDB byłby bardziej pomocny.Jaki jest najlepszy sposób na wyśledzenie, co sprawia, że ​​mały błąd powoduje problem.UWAGA: Nie mogę używać valgrind, nie działa w systemie operacyjnym, którego używam (QNX)

Każda pomoc byłaby świetna.

questionAnswers(1)

yourAnswerToTheQuestion