print语句引起的总线错误

时间:2013-02-28 18:10:09

标签: c++

好的,所以我有一个简单的功能,从5张牌扑克牌手中返回最高的非配对牌。但他遇到的问题很奇怪。这种随机总线错误随机发生,我不知道是什么原因。我以为这是我正在使用的印刷语句,但现在我不确定。我知道它看起来很乱,但是如果你看下面我打印“测试打印”字样的行,有人可以告诉我为什么在此行之后立即发生总线错误并且它没有达到第二个“测试打印” “声明。我的程序可能会耗尽内存吗?这可能没有任何意义,但我真的不能想到任何其他事情(请排除稍微令人困惑的代码):

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;
}

1 个答案:

答案 0 :(得分:3)

这可能是案例问题:

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++)

也许