我在使用std :: vector时遇到了一个随机异常。
以下是主要内容:
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)。在最后一行中,我在堆栈中更深地随机获取Access违规(std :: vector的_Orphan_Range方法)。
我看不出手表中的currentStroke有什么问题,点矢量看起来正常,颜色也一样,我猜像素的一些内部值被打破了(_Myfirst = 0x000000000038c700 _MyEnd = 0x000000000038c74c不会对我来说太好了,但我不确定。)
我对STL的细节不太熟悉,我不知道该找什么,特别是因为向量只保存无符号的int值,而不是一些奇特的类或结构,我没有想法什么可能搞乱矢量的内部价值。
任何建议或意见将不胜感激! 谢谢!
答案 0 :(得分:4)
myFunct有一个无限循环,可以填充stoke向量,直到你内存不足为止。