今天写了两句脑残代码

                  在一个链表中的指针,根据外部的参数定位到指针,然后删除,我原先写的是注释掉的那部分,我通过迭代器删除的那个指针在链表中的位置,然后通过迭代器删除

那个指针指向的对象。可是却忘了list.removeOne((*it))之后,链表变了,迭代器也就变了,所以会删除其他的对象,更严重的是越界,直接段错误。

                

bool ZigBeeNodeTreeWidget::removeNode(ushort devname, QList<QTreeWidgetItem *> &list)//去除一个树节点项
{
    QList<QTreeWidgetItem*>::iterator it;
    for (it = list.begin();it != list.end();++it) {
        if ((*it)->text(0) == QString::number(devname)) {
            delete *it;
            list.removeOne((*it));
           
//            list.removeOne((*it)); 原来写的
//            delete *it;
            return true;
        }
        //        else {
        //            return false;
        //        }
    }
    return false;
}

伤心死了,我的宝贵的时间。

你可能感兴趣的:(今天写了两句脑残代码)