【问题标题】:Crash at inserting element at begin of STL deque在 STL 双端队列开头插入元素时崩溃
【发布时间】:2022-01-14 00:50:37
【问题描述】:

从长远来看,我注意到在 STL 双端队列(双端队列)开头插入元素时会发生崩溃。这是等效的代码sn-p:

void func(std::deque<float> &list, float val)
{
  long curr_sz = list.size();
  if (curr_sz < 1)
  {
    list.insert(list.begin() + 0, val);
    return;
  }
}

代码在 list.insert(list.begin() + 0, val) 处崩溃。从长远来看,崩溃仅发生在 Edge 设备上。在 PC 版本中,它不会崩溃。 请帮助我可能是什么原因。

【问题讨论】:

  • 函数内的代码可以简化为if (list.empty()) { list.emplace_front(val); }
  • 请显示minimal reproducible example,如果此代码崩溃,则可能是其他原因损坏了list,或者您的程序只是内存不足

标签: c++ stl crash embedded


【解决方案1】:

核心问题似乎是+ 0。您正在添加到双端队列交互器。我会避免这样做。相反,使用 - 如 cmets 中提到的 @SomeProgrammerdude - 使用 .emplace_front(val).push_front(val)。 另外,不要检查大小,只需使用list.empty()。如果你想使用size() 使用std::size_t,而不是long 来存储结果。 long 可能会溢出。

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2016-02-11
    相关资源
    最近更新 更多