qt中的QET ASSERT失败<t> :: at:“索引超出范围”</t>

时间:2014-07-25 12:53:57

标签: c++ qt runtime-error

我仍然是Qt的新手,我最近一直致力于一个大型项目。当我尝试运行该项目时,我收到此错误:

ASSERT failure in QList<T>::at: "index out of range", file c:\qt\qt5.3.0\5.3\msvc2013_64\include\qtcore\qlist.h, line 479

只是想知道是否有人知道这意味着什么或我如何追查问题的根源?

[edit]我认为添加此代码会导致错误

autAtom *aP = new autAtom(Principal);
    autAtom *aQ = new autAtom(Principal);

    autData *P = new autData (DataAtom, aP);
    autData *Q = new autData (DataAtom, aQ);
    autData *X = new autData (AnyData);

    AUTPostulate *p;
    autStatementList preList;


    {
        preList.clear();
        //autData *d1 = new autData(NotHereData, X);
        autStatement *pre1 = new autStatement(aP, believes, X);
        autStatement *goal = new autStatement(aP, sees, X);
        preList.append(pre1);
        p = new AUTPostulate("BS", BS, goal, preList);
        cout << "" << p->getString().toStdString() << endl;
        AUTPostulates.append(p);

    }

取出时,工具运行正常。

2 个答案:

答案 0 :(得分:5)

我遇到了类似的问题,因为我在填充小部件之前在connect上执行了itemChanged,然后调用填充我的插槽代码。在我放置一个防止在小部件填充期间信号处理的警卫之后,我发现我可以很好地填充小部件,我也可以在之后处理信号。希望这会有所帮助。

答案 1 :(得分:1)

索引超出范围意味着您正在尝试访问QList对象的索引,或者可能是不存在的QList的子类的对象。因此,如果您有一个长度为5的QList,并且您尝试访问索引5,则它将超出范围。

此外,您的代码看起来像包含许多不是Qt或C ++标准的类。至少我不认识他们。在不知道这些课程的情况下,很难说这里发生了什么。