Я пытаюсь сохранить вектор, полный указателя на объекты Circle. Иногда ловушка bad_alloc работает, но иногда нет, тогда я получаю сообщение об ошибке:
Это приложение запросило у среды выполнения необычное завершение его работы. Пожалуйста, свяжитесь со службой поддержки приложения для получения дополнительной информации».
Возможно, векторный массив не может выделить больше памяти... Но bad_alloc этого не ловит.
Circle *ptr;
vector<Circle*> ptrarray;
try{
for (long long i = 0; i < 80000000; i++) {
ptr = new Circle(1,i);
ptrarray.push_back(ptr);
}
}catch(bad_alloc &ba){
cout << "Memory Leak" << endl;
}
Было бы здорово, если бы кто-нибудь мог мне помочь;) Спасибо заранее
cout
может быть динамическое выделение, которое может вызвать второй необработанный бросок), в в этом случае программа просто прервет(), и вы получите сообщение, которое вы процитировали. - person dlf   schedule 15.05.2014ptrarray.reserve(80000000);
, прежде чем войти в свой цикл. - person Paul R   schedule 15.05.2014std::string
, но я так не думаю. Я думаю, что все статично в отношении области действия обработчика. Было бы довольно странно, если бы не хватило памяти для самого механизма обработки... если бы потребовались какие-то дополнительные. - person luk32   schedule 15.05.2014<<
или конструкторbad_alloc
. - person dlf   schedule 15.05.2014try
, чтобы у такого простого обработчика не было проблем с памятью. Я нахожу это довольно опасным. Даже в случае другого исключения, если вы находитесь на границе OOM, вы можете взорваться из-за чего-то такого простого. - person luk32   schedule 15.05.2014