Ошибка qt ASSERT в QList <T> :: at: «индекс вне диапазона»

0

Я по-прежнему относительно новичок в 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
    Отслеживание источника проблемы заключается в чтении сообщения об ошибке: вы пытаетесь получить доступ к элементу по индексу, который находится за пределами. т.е. у вас есть ошибка.
  • 1
    Если вы работаете над трассировкой стека ошибки, это должно быть довольно просто исправить. На мой взгляд, сообщение об ошибке совершенно ясно, в чем дело, и мало места для интерпретации.
Показать ещё 3 комментария
Теги:
qt
runtime-error

2 ответа

3

Я столкнулся с аналогичной проблемой, потому что перед connect виджета я connect к itemChanged а затем во время заполнения кода слота. После того, как я включил охранник, который предотвратил обработку сигнала во время отображения виджета, я обнаружил, что могу заполнить виджет, и я также мог бы обработать сигнал после этого. Надеюсь это поможет.

  • 0
    Спасибо!! То же самое случилось со мной, но я не собирал это вместе, пока не увидел, что вы ответите !! Вы понятия не имеете, беда, которую вы только что спасли меня !!!
1

Индекс вне диапазона означает, что вы пытаетесь получить доступ к индексу объекта QList или, возможно, к объекту, который является подклассом QList, который не существует. Поэтому, если у вас есть QList длиной 5 и вы пытаетесь получить доступ к индексу 5, это будет вне диапазона.

Кроме того, похоже, что ваш код содержит много классов, которые не являются стандартными для Qt или C++. По крайней мере, я их не узнаю. Трудно сказать, что происходит здесь, не зная об этих классах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню