Вспоминается одна ошибка, с которой столкнулся несколько лет назад. Ошибка была допущена при парсинге бинарного протокола. Из-за чего иногда (может раз в неделю, может два) переменная типа uint32 принимала слишком большое значение. Это значение передавалось в new для выделения нового блока памяти. Естественно, когда в 32-битовом приложении new пытается выделить три с гаком гигабайта памяти, то это, обычно, заканчивается исключением bad_alloc. Но, т.к. это было исключение, а не вызов abort-а, ничего страшного не происходило. Просто диагностировалась проблема на уровне коннекшена, этот коннекшен грохался, устанавливался новый и работа продолжалась. При этом никакого пагубного влияния на другие коннекшены, которые обслуживались приложением (а их было несколько десятков), не было.
Но, видимо, это от того, что я не знал, что если память не удалось выделить, то это крах программы и исключения не помогут ;)