对于此代码,我的目标是更改某些函数(更像是对程序进行模块化),以便任何在数据库中搜索memberNumber的函数都将调用实际的搜索函数,该函数将返回布尔值。

现在,每当searchID函数返回true时,我的程序就会崩溃。当它返回false时,它不会崩溃。

原始工作功能:

bool DonorList::searchID(int memberNumber) const
{
    bool found = false;
    list<DonorType>::const_iterator iter = donors->begin();
    while (iter != donors->end() && !found)
    {
        if (iter->getMembershipNo() == memberNumber)
        {
            found = true;
        }
        else
            ++iter;
    }
    return found;
}


更改的功能:

bool DonorList::searchID(int memberNumber) const
{
    list<DonorType>::const_iterator iter;
    bool found = searchDonorLocation(memberNumber, iter);
    return found;
}


新增功能:

bool DonorList::searchDonorLocation(int memberNumber, list<DonorType>::const_iterator &iter) const
{
    iter = donors->begin();
    bool found = false;
    while (iter != donors->end())
    {
        if (iter->getMembershipNo() == memberNumber)
        {
            found = true;
        }
        else
            iter++;
    }
    return found;
}


我不知道是什么原因导致了问题,除了每当新更改的函数应该返回true时程序崩溃。我试过只返回searchDonorLocation(memberNumber,iter),但这会导致完全相同的崩溃。

最佳答案

while (iter != donors->end())
{
    if (iter->getMembershipNo() == memberNumber)
    {
        found = true;
    }
    else
        iter++;
}


当它们匹配时,循环永远不会结束,因为您不会碰到迭代器,因此循环永远不会结束。它是崩溃还是悬挂?

在原始代码中,测试退出循环的!found

while (iter != donors->end() && !found)

08-25 12:50
查看更多