来自 While 循环 C++ 的分段错误

Segmentation Fault from a While Loop C++

我正在尝试从地图内部进行搜索,将所有相关的子代和后代推入一个堆栈。 mined 是之前声明的 json 对象。

    if ( !mined[source].empty() ) {
        std::vector<std::string> minedDataVec = mined[source];
        while ( !minedDataVec.empty() ) {
            for (std::string s: minedDataVec) {
                stack.push(s);
                if ( !mined[s].empty() ) {
                    std::vector<std::string> minedDataVec = mined[s];
                } else {
                    minedDataVec.clear();
                }
            }
        }
    }

但是,我遇到了一个分段错误,我很确定这与这段代码中的 while 循环有关。删除 while 循环有效,但这意味着每次我想在我的地图中进行更深入的搜索时,我都必须手动添加更多代码。

首先,在 if 块中声明的名为 minedDataVec 的向量似乎没有意义...

至于分段错误,可能是因为minedDataVec.clear()使引用包含元素的任何引用、指针或迭代器无效。”(source ).

range-for 循环 for (std::string s: minedDataVec) 有一个指向 minedDataVec 的隐式迭代器,它可能会失效并导致无效读取访问导致分段错误。