Re: vector, release, std::out_of_range
От: _Vasilyev Ниоткуда  
Дата: 20.05.09 14:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите, пожалуйста, что может нехорошего случаться с вектором.

А>Вроде ничего особенного не делаю... push_back в одном месте, перебор в другом..
А>Код привести не могу, поскольку там много чего к делу не относящегося, а попытка смоделировать ту же ситуацию в новом проекте успеха не возымела.

А>В дебаг — версии все нормально, а в release — std::out_of_range() при использовании либо итераторов, либо at(). Если осуществлять доступ к элементам вектора через оператор [], то, никаких исключений, что в общем-то понятно, все выводится нормально. При более детальном рассмотрении становится видно, что в релизной версии портится _Mylast — он становится равным нулю, в итоге вот этот макрос _SCL_SECURE_VALIDATE_RANGE и выбрасывает исключение.


А>Вопрос: что может нехорошего случаться в релизной версии и как это найти?


С очень большой вероятностью — некорректная работа с памятью. Причем, совсем не обязательно, в куске кода где у тебя выкидывается исключение. Если используешь Visual Studio — попробуй использовать DCRT, хотя это иногда и неудобно. Профайлер какой-нить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.