Означает ли это, что моя программа падает в 0x001cd1a6
Да.
По этому адресу нет исполняемого кода.
Ну, это наверняка вызовет сбой (из-за недопустимых инструкций).
Другое дело, что каждый раз при сбое он выдает другой адрес.
В вашей программе есть потоки, поэтому схема ее распределения, вероятно, меняется при каждом запуске, поскольку потоки планируются по-разному.
Кроме того, Linux использует рандомизацию адресов, поэтому, если вы запускаете даже непотоковую программу несколько раз, вы получите разные адреса. С другой стороны, GDB отключает эту рандомизацию, поэтому, если вы запускаете непотоковую программу под GDB, она каждый раз должна вылетать в одном и том же месте.
Вы, вероятно, вызываете виртуальную функцию для объекта, который был признан недействительным (например, удален). Используйте команду where
GDB, чтобы узнать как вы оказались на неверном адресе.
Кроме того, никогда не вызывайте свой исполняемый файл test
в UNIX: это конфликтует с /usr/bin/test
, который будут использовать многие сценарии оболочки.