Определить переменную, вызывающую ошибку памяти
Поэтому я несколько раз сталкивался со странной ошибкой, и я искал несколько хороших указаний, чтобы определить проблему.
В основном то, что я вижу, это ошибка сегмента. Симптомы следующие:
Это происходит только тогда, когда программа находится в режиме выпуска, а не в отладке.Это выглядит как segfault, и GDB говорит мне, что он находится в_list_release
/_free()
/free()
в конце функции.
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
Я не использую динамическую память (за исключением того, что может появиться в Eigen (или других библиотеках)
Я могу напечатать все локальные переменные непосредственно перед концом функции, так что это не двойное освобождение.В прошлый раз это произошло из-за ошибки памяти, которая подходит для всех этих проблем. Раздражающе на этот раз я не могу найти проблему.
Что я хотел бы сделать, это следующее:
Это было бы очень полезно: как я могу принудительно вызвать эту ошибку в режиме отладки, тогда GDB будет гораздо более полезным.Каков наилучший способ отследить, какой маленький педераст вызывает проблему.НОТА: Я не могу использовать valgrind, он не работает в операционной системе, которую я использую (QNX)Любая помощь будет отличной.