Я пытаюсь преобразовать ориентированный граф в неориентированный граф, который хранится в формате CSR. Когда код вставки работает нормально. Но затем итерируйте вектор множества, это дает ошибку сегмента.
std::vector<std::set<idx_t>> srcVDst(nnodes);
for (idx_t src = 0; src < nnodes; src++) {
idx_t edge_begin = p_row_start[src];
idx_t edge_end = p_row_start[src + 1];
for (idx_t edge = edge_begin; edge < edge_end; edge++) {
idx_t dst = p_edge_dst[edge];
srcVDst[src].insert(dst);
srcVDst[dst].insert(src);
}
}
// omit for realloc p_edge_dst and p_row_start
nedges = 0;
for (idx_t src = 0; src < nnodes; src++) {
std::set<idx_t> &VDst = srcVDst[src];
for (idx_t dst:VDst) { // HERE IS THE SEGFAULT
p_edge_dst[nedges++] = dst;
}
p_row_start[src + 1] = nedges;
}
Когда я пытался отследить ошибку в IDE, она останавливается на этом
_Self&
operator++() _GLIBCXX_NOEXCEPT
{
_M_node = _Rb_tree_increment(_M_node);
return *this;
}
Я очень плохо знаком с C ++. Я пишу Java все время. Мне просто интересно, является ли итератор в C ++ без сохранения состояния? Почему дает мне такую ошибку? Спасибо.