我尝试运行此代码时遇到问题

void MyClass::setUp(){
    list->clear();
    Iterator i = ctr.getAll().iterator();
    while (i.valid()) {
        list->addItem(QString::fromStdString(i.elem().getNr()));
        i.next();
    }
}

当我退出函数时,会发生错误:



我正在尝试遍历自定义列表

Iterator类是这样的:
void Iterator::first(){
    while (pos < ht.nrElem && ht.list[pos] == nullptr)
        pos++;
    if (pos < ht.nrElem)
        current = ht.list[pos];
}

Iterator::Iterator(const HashTable & ht): ht { ht }{
    pos = 0;
    first(); // current will refer the first element of the list
}


void Iterator::next(){
    current = current->getNext();
    if (current == nullptr) {
        pos++;
        first();
    }
}

bool Iterator::valid(){
    return (pos < ht.nrElem) && (current != nullptr);
}

Car& Iterator::elem() const{
    return current->getCar();
}

最佳答案

一方面,Iterator::first以及构造函数都不必初始化current。其次,在Iterator::Iterator(const HashTable & ht): ht { ht }中,这是否意味着Iterator具有成员ht,并且该参数也称为ht?这是一个坏习惯。永远不要调用与类字段同名的成员函数参数。

关于c++ - C++调试断言失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37440057/

10-12 13:05