Ошибка сегментации из pop_front () в C ++ - PullRequest
0 голосов
/ 20 марта 2011

Моя проблема в том, что я получаю ошибку сегментации, которая возникает после того, как я звоню "processList.pop_front()". Если я закомментирую «processList.pop_front()», то произойдет сегментация во время второй итерации самого внешнего цикла for, после вызова tt.pop_front(), после того, как этот внутренний цикл 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 Ответ

2 голосов
/ 04 сентября 2012

У меня похожая проблема, и я решил ее, добавив недопустимое значение в 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();
    }

}

Возможно, вам придется немного его адаптировать.Это не очень хорошее решение, но оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...