2014-10-26 5 views
0

Этот простой пример работает так, как ожидалось, в g ++, но в MS VS 2010 или 2013 отображается ошибка отладки библиотеки времени выполнения (недопустимый размер выделения) до того, как ошибка будет обнаружена (щелчок Ignore затем протекает через обработчик ошибок правильно показывает, что он является bad_alloc).
Любые идеи о том, почему VS ведет себя таким образом?bad_alloc preempted в VS 2010/2013 C++

#include <iostream> 
#include <exception> 
using namespace std; 
int main() { 
    int x; 
    cout << "Enter -1 for bad_alloc: "; 
    cin >> x; 
    try 
    { 
     int* myarray = new int[x]; 
    } 
    catch (exception& e) 
    { 
     cout << "Standard exception: " << e.what() << endl; 
    }  
    return 0; 
} 
+1

это только отладочная и/или отладочная библиотека, которая делает это, если вы запускаете без отладчика/в качестве версии выпуска, это не будет. – wimh

+0

Оказывается, это так. Думал, что я это проверил, но я этого не сделал. Благодарю. –

ответ

0

Это то, что вы можете проанализировать исключение в том месте, которое оно выбрано, до того, как стек будет размотан.

Это функция, что отладчик делает это за вас.

Ни о чем не беспокоиться.

Смежные вопросы