QT容器类QList调用erase崩溃

如果有遇到程序崩溃在容器类的erase函数,那你可能遇到和我一样的问题。当QList前面还有数据,且被删除到倒数第二个或最后一个时,容器end的位置(地址)发生了变化,如果不重新获取end的位置,那就会出现越界的问题。

cpp 复制代码
//崩溃样例
QList<int> ls;
ls << 1 << 2 << 3 << 4;
auto begin = ls.begin();
auto end = ls.end();
while(begin != end)
{
    qDebug() << begin.i << ls.end().i;
    if(*begin == 3 || *begin == 4)
        begin = ls.erase(begin);
    else
        ++begin;
}

正确的做法就是,在进行批量删除时,每次遍历下一个的时候都重新获取容器的end位置,避免遇到容器end的位置(地址)发生了变化造成的越界问题。

cpp 复制代码
//正确样例
QList<int> ls;
ls << 1 << 2 << 3 << 4;
auto begin = ls.begin();
while(begin != ls.end())
{
    qDebug() << begin.i << ls.end().i;
    if(*begin == 3 || *begin == 4)
        begin = ls.erase(begin);
    else
        ++begin;
}
相关推荐
智购科技自动售货机工厂9 小时前
2026自动售货机异常重启根因分析:从日志挖掘到内存取证的技术实践~YH
开发语言·数据库·单片机·嵌入式硬件·人机交互
Escalating_xu9 小时前
【C++类和对象(上)】从类的定义、封装与对象模型到内存对齐和 this 指针
开发语言·前端·c++
阿里嘎多学长9 小时前
2026-08-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
默辨9 小时前
我用Java后端的视角读了一遍JoyAgent-JDGenie
java·开发语言
常山云栈9 小时前
如何理解python中的鸭子模(类)型?
开发语言·python
y = xⁿ9 小时前
DeepSeek harness工具系统什么设计的?
开发语言·python
luj_17689 小时前
尾椎藏今生记忆?骨盆对应不确定性
开发语言·网络·c++·经验分享·算法
ttwuai9 小时前
Go 后台接入 CAS 单点登录后,原来的权限怎么继续生效?
开发语言·后端·golang
断点之下9 小时前
C++类和对象:六个默认成员函数详解
开发语言·c++