【发布时间】:2022-01-22 12:48:35
【问题描述】:
我正在尝试从地图内部进行搜索,将所有相关的子代和后代推入堆栈。 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 循环是可行的,但这意味着每次我想在地图中进行更深入的搜索时,我都必须手动添加更多代码。
【问题讨论】:
-
std::vector<std::string> minedDataVec = mined[s];-- 您在if语句中在这里声明了一个局部变量,它与您在其他地方声明的mindDataVec无关。另外,您是否知道如果条目不存在,地图的operator []会插入一个空白条目? -
您可能不想更改在该循环中循环的容器的大小。在您的 for 循环中,您循环遍历
minedDataVec中的每个s。最终,您可能会运行minedDataVec.clear(),这很可能会导致 for each 循环增加一个无效的迭代器或索引到它不再存在的minedDataVec。此外,当您编写std::vector<std::string> minedDataVec = mined[s];时,您定义的变量仅存在于 if 语句的范围内,并且从不使用它。
标签: c++ while-loop segmentation-fault