*迭代器导致段错误

Pie*_*ter 3 c++ oop iterator c++-standard-library

我正试图通过列表.以下是一些声明:

list<CG1_Edge*> ActiveEdges;
list<CG1_Edge*>::iterator ActiveEdgeIterator;
Run Code Online (Sandbox Code Playgroud)

有时,此代码段错误在第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);
}
Run Code Online (Sandbox Code Playgroud)

是否有任何常见原因可能会导致段错误?

Mat*_*Mat 5

你应该使用类似的东西:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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