gpt4 book ai didi

c++ - SIGBART 错误 vector>

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:57 25 4
gpt4 key购买 nike

我找不到我的程序抛出 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;

}

如有任何帮助,我们将不胜感激。

最佳答案

很可能你的代码在 Node placeNode = edge.front(); 行失败,你需要检查 edge 是否为空

if (edge.empty()){
continue;
}
Node placeNode = edge.front();

顺便说一句,isEdgeConnected() 函数只是检查edgeList 中的节点值,您不需要复制所有元素。如果您的 edgeList 很大,复制会很昂贵。

例如,您可以直接迭代edgeList,而且++iter 比`iter++ 更高效,参见this

for (vector<list<Node> >::iterator it = edgeList->begin();                                       
it != edgeList->end(); ++it) {
}

关于c++ - SIGBART 错误 vector<list<myClass>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com