У меня есть программа, которая реализует несколько алгоритмов эвристического поиска и несколько доменов, предназначенных для экспериментальной оценки различных алгоритмов. Программа написана на C ++, построена с использованием набора инструментов GNU и работает в 64-битной системе Ubuntu. Когда я запускаю свои эксперименты, я использую команду bash ulimit
, чтобы ограничить объем виртуальной памяти, которую может использовать процесс, чтобы моя тестовая система не начала подкачку.
Определенные комбинации алгоритма / тестового экземпляра достигают установленного мной предела памяти. В большинстве случаев программа выдает исключение std :: bad_alloc, которое выводится обработчиком по умолчанию, после чего программа завершается. Иногда, вместо этого, программа просто перестает работать.
Почему моя программа иногда выдает ошибку segfault при нехватке памяти, а не сообщает о необработанном std :: bad_alloc и завершается?