由print语句引起的总线错误

bus error caused by print statement

本文关键字:总线 错误 print 语句      更新时间:2023-10-16

好的,我有一个简单的函数,从5张牌的扑克牌中返回最大的非对牌。但我现在的问题很奇怪。有一个随机的总线错误随机发生,我不知道是什么原因。我以为是我用的打印语句,但现在我不确定了。我知道它看起来很乱,但是如果你看看下面我打印单词"test print"的那行,有人能告诉我为什么在这行之后立即有一个总线错误,它没有到达第二个"test print"语句。我的程序内存不足了吗??这可能没有意义,但我真的想不出其他任何东西(请排除稍微令人困惑的代码):

int Hand::highestNonPair(int *face_array_exclude, int size)
{
    int highest = 0;
    int contains_excludable = 0;
    int i = 0;
    if(this->hasAnother(i) == false)
            highest = cards[i]->getFace();

    for(i= 0;i<cards.size();i++)
    {
        if((cards[i+1]->getFace() > cards[i]->getFace()) &&
        (this->hasAnother(i) == false)){
            if(size>0){
                for(int c = 0;c<size;c++){
                    if(cards[i]->getFace() == face_array_exclude[c])
                            contains_excludable = 1;
                    }
             }
                 if(!contains_excludable)
            highest = cards[i+1]->getFace();
        cout<<nTEST PRINT"<<endl;
        contains_excludable = 0;
        cout<<nTEST PRINT"<<endl;
        }
    }
    return highest;
}

位可以大小写问题:

if((cards[i+1]->getFace() > cards[i]->getFace()) &&

,因为i的最大值可能是cards.size() - 1。这意味着cards[i+1将是一个无效的条目。

改变循环:

for(i= 0;i<cards.size();i++)

for(i= 0;i<cards.size() - 1;i++)
也许