gpt4 book ai didi

c++ - 访问迭代器值导致段错误 11

转载 作者:行者123 更新时间:2023-11-27 22:58:19 26 4
gpt4 key购买 nike

我有一个循环可以删除邻接表中的图边。它看起来像这样:

void Graph::removeEdge(int a, int b)
{
vector<int>::iterator it = adjList[a].begin();
while(*it != b) it++;
adjList[a].erase(it);

it = adjList[b].begin();
while(*it != a) it++;
adjList[b].erase(it);
}

尝试几次后,我得到了 Segmentation fault: 11 错误。它是由访问*it引起的。可能是什么原因,如何解决?

更多信息:

// This is my structure
vector<int> *adjList;


Graph::Graph(int V)
{
this->V = V;
adjList = new vector<int>[V];
clear();
}

最佳答案

这里可能发生的事情是:1.陷入无限循环并且(在您的情况下:段错误)2. 删除不存在的迭代器(段错误)。

要更正这些问题,请执行以下操作:

代替:

  while(*it != b) it++;
adjList[a].erase(it);

做:

  while(it != adjList[a].end() && *it != b) it++;
if (it != adjList[a].end()) adjList[a].erase(it);

如果到达 end 时还没有找到元素 b ,这将结束循环,并且 if 子句将确保您删除一个存在的迭代器。

关于c++ - 访问迭代器值导致段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343636/

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