尝试返回布尔值时程序崩溃

时间:2016-12-01 08:18:42

标签: c++ function boolean

对于这段代码,我的目标是改变一些函数(更像是模块化程序),这样任何在数据库中搜索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),但这会导致完全相同的崩溃。

2 个答案:

答案 0 :(得分:5)

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

当它们匹配时,你的循环永远不会结束,因为你没有碰撞你的迭代器,所以它永远不会到达终点。是崩溃还是挂?

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

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

答案 1 :(得分:2)

如果条件满足,请注意searchDonorLocation(..)不会退出while循环。 尝试:

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