• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我是张洪铭我是熊博士
时光静好,与君同;细水长流,与君语
博客园    首页    新随笔    联系   管理    订阅  订阅

QMap遍历时Beng的异常特性记录

//会崩溃的写法
    for(auto var = valueRow.mapValue().begin(); var != valueRow.mapValue().end(); var++)
    {
        if (!var.value().isValid() || var.value().isNull())
            continue;
        this->addItem(var.key(), var.value());
    }


//不会崩溃的写法
    QMap<int, QVariant> valueRow_ =  valueRow.mapValue();
    for(auto var = valueRow_.cbegin(); var != valueRow_.cend(); var++)
    {
        if (!var.value().isValid() || var.value().isNull())
            continue;
        this->addItem(var.key(), var.value());
    }


//车祸现场
struct QMapNode : public QMapNodeBase
{
...
...   

    inline QMapNode *nextNode() { return reinterpret_cast<QMapNode *>(QMapNodeBase::nextNode()); }

...
...



实质上没有不同,为何会崩溃???
::组长郑涛分析:
var != valueRow.mapValue().end() 每次都会拷贝一份新的。但是var是var = valueRow.mapValue().begin()这里的拷贝。 每次拷贝都不一样造成的Beng。

 

posted @ 2019-12-26 17:05  我是张洪铭我是熊博士  阅读(590)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3