我有这个代码,它应该寻找std::vector<std::vector<int>>
中所有向量中存在的元素:
for(int x = 0;x < list.size();x++){
for(int y = 0;y < list[x].size();y++){
std::vector<std::vector<int>::iterator> ptr;
for(int z = 1;z < list.size();z++){
std::vector<int>::iterator iter = std::find(list[z].begin(),
list[z].end(), list[x][y]);
if(iter != list[z].end()){
ptr.push_back(iter);
}else
goto fail;
}
list[0].erase(list[0].begin() + y);
for(int z = 1;z <= ptr.size();z++){
list[z].erase(ptr[z - 1]);
}
fail: continue;
}
}
程序总是产生错误的输出并随机崩溃。调试显示,在SIGTRAP
中解构list
时,它会收到ntdll
。这是随机发生的,但程序永远不能正常工作。我在代码中没有任何断点。
答案 0 :(得分:0)
这些是我在问这个问题后的代码中发现的错误:
list[0]
,而不是为list[x]
设计,导致使用属于另一个向量的迭代器调用erase()
,导致记忆腐败。x
在某些地方被0
取代(忘记更改)。list
被程序中的其他代码损坏(现在修复)。以下是修正:
std::vector<std::vector<int>::iterator>
和if(z==x)continue;else{list[z].erase(*iter); iter++;}
的迭代器确保iter
始终指向正确的元素。0
替换为x
。该程序现在正常运行,感谢您试图帮助我。