c++ - *迭代器导致段错误

标签 c++ oop iterator c++-standard-library

我正在尝试遍历一个列表。以下是一些声明:

list<CG1_Edge*> ActiveEdges;
list<CG1_Edge*>::iterator ActiveEdgeIterator;

有时,这段代码会在第 2 行出现段错误:

for (this->ActiveEdgeIterator = this->ActiveEdges.begin(); this->ActiveEdgeIterator != this->ActiveEdges.end(); ++this->ActiveEdgeIterator) {
    CG1_Edge* currentEdge = *this->ActiveEdgeIterator;
    if (currentEdge->y_up < y)
        this->ActiveEdges.erase(this->ActiveEdgeIterator);
}

这可能导致段错误的常见原因有哪些?

最佳答案

你应该使用类似的东西:

for (this->ActiveEdgeIterator = this->ActiveEdges.begin(); this->ActiveEdgeIterator != this->ActiveEdges.end(); ) {
    CG1_Edge* currentEdge = *this->ActiveEdgeIterator;
    if (currentEdge->y_up < y)
        this->ActiveEdgeIterator = this->ActiveEdges.erase(this->ActiveEdgeIterator);
    else
        ++this->ActiveEdgeIterator;
}

因为 erase 返回一个定位在下一个元素的迭代器。

(注意:将迭代器作为成员看起来很奇怪。)

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

相关文章:

c++ - 静态成员成员

python - 如何检查一个列表是否等于使用类创建的另一个列表?

c++ - 在 for 循环中删除 vector 中的对象时,如何防止发生段错误?

java - 在仍在使用时使用迭代器从 ArrayList 中删除内容

c++ - 为什么范围的算法与 std 的迭代器不兼容?

c++ - 对未初始化内存使用算法的优点

c++ - union 中 int 数据类型 (low, high) 结构体表示的 Double 数据类型

c++ - 无法在 cbegin 中定义 initializer_list

c++ - Qt 的连接调用本身是线程安全的吗?

java - 如何通过引用将 List 从 Java 作为 vector 传递给 JNI C++?