У меня довольно серьезная ошибка в моей программе - случайные вызовы new () выдают bad_alloc.
Из документации, которую я могу найти на bad_alloc, похоже, что она выброшена по следующим причинам:
Когда на компьютере не хватает памяти (что определенно не происходит, у меня есть 4 ГБ ОЗУ, программа выдает bad_alloc при использовании менее 5 МБ (проверено в диспетчере задач), когда в фоновом режиме ничего серьезного не происходит). 1007 *
Если память становится слишком фрагментированной, чтобы выделять новые блоки (что, опять же, маловероятно - блок самого большого размера, который я когда-либо выделяю, будет около 1 КБ, а до сбоя это не делается более 100 раз) происходит).
Исходя из этих описаний, у меня нет нигде, где можно было бы выбросить bad_alloc.
Однако приложение, которое я запускаю, запускает более одного потока, что может способствовать возникновению проблемы. При тестировании всех объектов в одном потоке все работает нормально. Единственная другая вещь, о которой я могу думать, это то, что здесь происходит, может быть какое-то состояние гонки, вызванное вызовом new () более чем в одном месте одновременно, но я попытался добавить мьютексы, чтобы предотвратить это поведение. без эффекта.
Поскольку программа состоит из нескольких сотен строк, и я понятия не имею, в чем проблема на самом деле, я не уверен, что, если таковые имеются, фрагменты кода для публикации. Вместо этого мне было интересно, есть ли какие-нибудь инструменты, которые помогут мне проверить подобные вещи, или есть какие-то общие стратегии, которые могут помочь мне с этой проблемой.
Я использую Microsoft Visual Studio 2008 с Poco для многопоточности.