【发布时间】:2021-03-29 19:12:55
【问题描述】:
我有一个遍历地图堆栈的 for 循环,但是当我执行代码时出现分段错误。我的代码是这样的:
// std::stack< std::map<string, string> > STACK;
size_t getStackSize() { return this->STACK.size();}
std::stack< std::map<string, string> > getSTACK() { return this->STACK;}
for (size_t i = 0; i < ObjSTACK.getStackSize(); ++i )
{
for (auto& [v, l] : ObjSTACK.getSTACK().top())
{
std::cout << v << ':' << l << '\n';
}
ObjSTACK.getSTACK().pop();
}
为什么会出现分段错误?有没有更好的方法来迭代 std::stack> ?
【问题讨论】:
-
ObjSTACK.getStackSize()?这意味着ObjSTACK是别的东西然后std::stack,请提供minimal reproducible example。也可以肯定getStackSize()在撒谎。 -
正常的方法是
while (!stack.empty()) { /* use top() item */; stack.pop(); }——考虑到你奇怪的for循环使用了一些未知的“大小”值,我猜你在堆栈为空后仍在循环,@987654329 @访问抛出。 -
while (!ObjSTACK.getSTACK().empty()) -
@MarekR 我的函数 getSize() 返回来自 STL 库的函数 std::stack > STACK.size() 的值。跨度>
-
好的,
getSize返回,但你使用了getStackSize- 乱码?专注于minimal reproducible example。