我的问题是我在调用“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();
}
}
答案 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();
}
}
可能你需要调整一下。 这不是一个很好的解决方案,但它确实有效。