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;
}
相关推荐
小熊恋旧29 分钟前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合30 分钟前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J30 分钟前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
will_net1 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央1 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>2 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
努力努力再努力wz2 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
飞浪纪元[FWC–FE]3 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt
Wang's Blog3 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我123453 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理