我找不到我的程序抛出SIGBART错误的原因。
调用此函数时,我将其缩小了。
bool Node::isEdgeConnected(Node vertex1, Node vertex2){
//I'm not sure if this is the right way to copy this vector <list>
vector<list<Node> > myEdgeList = *edgeList;//edgeList is a private data member of Node
vector<list<Node> >::iterator it;
cout << myEdgeList.size();
for (it = myEdgeList.begin(); it != myEdgeList.end(); it++) {
list<Node> edge;
edge = *it;
Node placeNode = edge.front();
cout <<placeNode.getNodeId()<<endl;
list<Node>::iterator eIt;
for (eIt = edge.begin(); eIt != edge.end(); eIt++) {
Node placeNode1, placeNode2;
placeNode1 = edge.front();
placeNode2 = *eIt;
cout << placeNode1.getNodeId() << " " << placeNode2.getNodeId()<<endl;
if(placeNode1.getNodeId() == vertex1.getNodeId() &&
placeNode2.getNodeId() == vertex2.getNodeId()){
return true;
}
}
}
return false;
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
您的代码很可能在第Node placeNode = edge.front();
行中失败,您需要检查edge
是否为空
if (edge.empty()){
continue;
}
Node placeNode = edge.front();
BTW,isEdgeConnected()
函数只是检查edgeList
内的节点值,您不需要复制所有元素。如果您的edgeList
很大,那么复制将会非常昂贵。
例如,您可以直接迭代edgeList
,++iter
比`iter ++更有效,请参阅this
for (vector<list<Node> >::iterator it = edgeList->begin();
it != edgeList->end(); ++it) {
}