>我有一个结构定义如下:
struct node {
int index;
std::set<StringRef> set1;
std::set<StringRef> set2;
std::set<StringRef> set3;
std::set<StringRef> set4;
};
然后,我将循环访问定义如下node
List
:
std::list<node> my_table;
我现在正在循环浏览此列表并访问set1
和set2
,但这会导致分段错误。
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;
}
您正在取消引用end
迭代器。 你应该使用反向迭代器
for (auto it = liveness_table.rbegin(); it != liveness_table.rend(); ++it)
以相反的顺序遍历列表。
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)