Я боюсь случайного исключения при использовании std :: vector.C++ vector push_back нарушение прав доступа
Вот основные элементы:
struct Stroke
{
std::vector<vec2> points;
Pixel color;
std::vector<unsigned int> pixelIds;
};
void myFunc()
{
while (strokes.size() < 5000)
{
if (/*A condition that is always met at some point*/)
{
break;
}
//Some code
newStroke->pixelIds.clear();
newStroke->pixelIds.resize(0);
strokes.push_back(newStroke);
}
for (int i = 0; i < strokes.size(); ++i)
{
drawStroke(strokes[i]);
}
}
void drawStroke(Stroke * currentStroke)
{
std::vector<int> roundIds;
//Fill roundIds
//Some loops and conditions
for (int i = 0; i < roundIds.size(); ++i)
{
if (/*Check condition*/)
{
// Exception is raised deeper in the stack here
currentStroke->pixelIds.push_back(currentRoundId);
}
}
}
я ушел из большой части кода, которые не должны реально повлиять на это, потому что я понятия не имею, где эта проблема может исходить от (так что я должен был бы скопируйте/вставьте весь код: D). В последней строке я случайно получаю нарушение доступа глубже в стеке (метод _Orphan_Range для std :: vector).
Я не вижу ничего плохого в currentStroke в часах, вектор точек выглядит нормально, цвет тоже, я предполагаю, что некоторые внутренние значения пиксельных идентификаторов сломаны (_Myfirst = 0x000000000038c700 _MyEnd = 0x000000000038c74c не выглядит слишком хорошо для меня, но я не уверен).
Я не очень разбираюсь в деталях STL, и я не знаю, что искать особенно потому, что вектор содержит только значения unsigned int, а не какой-то фантастический странный класс или структуру, и я понятия не имею, когда-либо испортили внутренние значения вектора.
Любое предложение или совет будут оценены! Спасибо!
это 'while (true)' часть убивает все – davidhigh
Стандартная технология отладки: удалите части, которые не должны влиять на проблему, а затем _run код left over_, чтобы увидеть, есть ли у вас проблема. Если у вас нет проблемы, вы нарушили свои заблуждения. Если у вас все еще есть проблема, то удалите части, которые, по вашему мнению, станут проблемой, пока у вас не будет проблемы. Когда проблема уходит, у вас есть очень хорошая идея, где проблема. – Hurkyl
@ davidhigh: Наверное, я забыл слишком много частей реального кода. У меня есть условие, чтобы разбить этот цикл, и я уверен, что он попадает каждый раз. (Мы можем спорить о плохом дизайне, но проблема не связана с тем, что этот цикл бесконечен.) – Xelareip