Segfault при итерации вектора множеств - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь преобразовать ориентированный граф в неориентированный граф, который хранится в формате 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 ++ без сохранения состояния? Почему дает мне такую ​​ошибку? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...