У меня есть довольно серьезная ошибка в моей программе - случайные вызовы new() throw bad_alloc.Стратегия отладки, чтобы найти причину bad_alloc
Из документации можно найти на bad_alloc, это, кажется, брошена по этим причинам:
Когда компьютер работает из памяти (что, безусловно, не происходит, у меня есть 4 Гб оперативной памяти, программа бросает bad_alloc при использовании менее 5 МБ (проверяется в taskmanager), ничего серьезного не работает в фоновом режиме).
Если память становится слишком фрагментированной, чтобы выделять новые блоки (что, опять же, маловероятно), блок наибольшего размера, который я когда-либо выделял, был бы около 1 КБ, и это не будет сделано более 100 раз, прежде чем произойдет сбой).
Основываясь на этих описаниях, у меня действительно нет нигде, в которое может быть выброшен bad_alloc.
Однако приложение, в котором выполняется приложение, запускает более одного потока, что может быть связано с проблемой. Проверяя все объекты в одном потоке, все работает нормально. Единственное, что я могу подумать об этом, это может быть какое-то гоночное условие, вызванное вызовом new() в нескольких местах одновременно, но я попытался добавить мьютексы, чтобы предотвратить это поведение нет эффекта.
Потому что программа несколько сотен строк, и я понятия не имею, где проблема на самом деле, я не уверен, что, если есть, фрагменты кода для публикации. Вместо этого мне было интересно, есть ли какие-либо инструменты, которые помогут мне проверить это, или если есть какие-то общие стратегии, которые могут помочь мне с этой проблемой.
Я использую Microsoft Visual Studio 2008 с Poco для потоковой передачи.
На самом деле это была проблема ... не знаю, где именно была проблема, но есть много искалеченных переменных, блуждающих по странным местам - похоже, что где-то было условие гонки. Спасибо! – Salami
Это было мое дело ... Я думал, что я вызываю 'new char [_len]', но я вызывал 'new char [len]', когда 'len' еще не был инициализирован, поэтому, вероятно, какое-то огромное количество. Это действительно помогло задуматься о том, сколько пространства я прошу и посмотреть на ценности ближе. Спасибо за ответ. – flcoder