C ++中pop_front()的分段错误

时间:2011-03-19 21:18:09

标签: c++ list segmentation-fault

我的问题是我在调用“processList.pop_front()”后出现分段错误。如果我注释掉“processList.pop_front()”,则在tt.pop_front()调用之后,在最外层for循环的第二次迭代期间发生分段,之后内部for循环经历了近5000次迭代。我看不出是什么问题。有什么想法吗?

loopLimit = processList.size();

for(int i = 0; i < loopLimit; i++)
{
    tempProcess = processList.front();
    tt = tempProcess.memAccesses;
    cout << "process number " << i << "\n";

    while(!tt.empty())
    {
        t = tt.front();
        tt.pop_front();
        cout << "from processlist: " << t.instrType << "  " << t.instrAddr << "\n";
    }

    if(!processList.empty())
    {
        cout << "size is now: " << processList.size() << "\n";
        processList.pop_front();
    }

}

1 个答案:

答案 0 :(得分:2)

我有类似的问题,我通过向deque添加无效值来解决它:

loopLimit = processList.size();

for(int i = 0; i < loopLimit; i++)
{
    tempProcess = processList.front();
    tt = tempProcess.memAccesses;
    cout << "process number " << i << "\n";

    tt.push_back(-1);  //I guess you don't have a -1 type, so you wont have colisions
    while( tt.front()!=-1)
    {
        t = tt.front();
        tt.pop_front();
        cout << "from processlist: " << t.instrType << "  " << t.instrAddr << "\n";
    }

    if(!processList.empty())


    {
        cout << "size is now: " << processList.size() << "\n";
        processList.pop_front();
    }

}

可能你需要调整一下。 这不是一个很好的解决方案,但它确实有效。