я составил и запустить следующий C++ код с г ++ версии 4.8.2:Код, выполняемый после того, как ошибка произошла
vector<int> ivec{0,1,2};
int& iref = ivec[1];
for (int i=3;i<100;++i)
ivec.push_back(i);
iref = 10;
cerr<<"After Error"<<'\n';
return 0;
Программа будет врезаться, как ожидается, на линии iref = 10;
, поскольку ссылка аннулируется. Но строка "After Error"
печатается. Зачем?
Ответ на этот вопрос очень важен для меня, потому что большую часть времени я использую cout
или cerr
, чтобы найти строку, вызывающую ошибку во время выполнения.
Вы указали '-O0' на компиляции? – timrau
Я пробовал это и ничего не меняет. – MrDetective
Похоже, что 'iref = 10;' искажает стек, но это не приводит к сбою - вы не узнаете об этом до тех пор, пока 'main()' не попытается вернуться. Это объясняет, почему вы видите отладочный вывод перед сообщением об ошибке seg fault. –