c ++ vector push_back访问冲突

时间:2015-05-13 11:30:13

标签: c++ exception stl

我在使用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值,而不是一些奇特的类或结构,我没有想法什么可能搞乱矢量的内部价值。

任何建议或意见将不胜感激! 谢谢!

1 个答案:

答案 0 :(得分:4)

myFunct有一个无限循环,可以填充stoke向量,直到你内存不足为止。