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