C ++分段错误 - 具有集合的结构列表

时间:2018-01-10 17:49:07

标签: c++ segmentation-fault set

我的结构定义如下:

struct node {
int index;
std::set<StringRef> set1;
std::set<StringRef> set2;
std::set<StringRef> set3;
std::set<StringRef> set4;

};  

我然后循环List node定义如下:

 std::list<node> my_table;

我现在循环浏览此列表并访问set1set2,但这会导致细分错误。

for (std::list<liveness_node>::iterator it = liveness_table.end(); it != liveness_table.begin(); --it) {

            std::set<StringRef> in_temp = it->set1;
            std::set<StringRef> out_temp = it->set2;

}

2 个答案:

答案 0 :(得分:3)

您正在取消引用end迭代器。你应该使用反向迭代器

for (auto it = liveness_table.rbegin(); it != liveness_table.rend(); ++it)

以相反的顺序遍历列表。

答案 1 :(得分:2)

for (std::list<liveness_node>::iterator it = liveness_table.end(); it != liveness_table.begin(); --it)

您尝试访问liveness_table.end()end()返回最后一个元素+ 1,您不能取消引用并使用end()。相反,使用反向迭代器:

for (std::list<liveness_node>::reverse_iterator it = liveness_table.rbegin(); it != liveness_table.rend(); ++it)