C++ 打印语句导致的总线错误

C++ 打印语句导致的总线错误,c++,C++,好的,我有一个简单的函数,它返回5张牌中最高的非对牌。但我遇到的问题很严重。有一个随机发生的总线错误,我不知道是什么原因。我原以为我用的是打印报表,但现在我不确定。我知道这看起来很乱,但如果你看下面我打印“测试打印”字样的那一行,有人能告诉我为什么在这一行之后立即出现总线错误,并且没有到达第二个“测试打印”语句。我的程序的内存可能用完了吗???这可能没有任何意义,但我真的想不出其他任何东西(请排除稍微令人困惑的代码): int-Hand::highestNonPair(int*face\u-ar

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

int-Hand::highestNonPair(int*face\u-array\u-exclude,int-size)
{
int最高=0;
int包含_excludable=0;
int i=0;
如果(这个->有另一个(i)==false)
最高=卡[i]->getFace();
对于(i=0;igetFace()>cards[i]->getFace())&&
(这个->另一个(i)=假){
如果(大小>0){
对于(int c=0;cgetFace()==face\u array\u exclude[c])
包含_excludable=1;
}
}
如果(!包含_可排除)
最高=卡片[i+1]->getFace();

cout钻头可能出现以下问题:

if((cards[i+1]->getFace() > cards[i]->getFace()) &&
因为
i
的最大值可能是
cards.size()-1
。这意味着
cards[i+1
将是无效条目

更改循环:

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

对于(i=0;i位可能出现以下情况:

if((cards[i+1]->getFace() > cards[i]->getFace()) &&
因为
i
的最大值可能是
cards.size()-1
。这意味着
cards[i+1
将是无效条目

更改循环:

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

对于(i=0;ito start off),您的cout语句缺少引号。包含cards[i+1]->getFace()的行看起来有点可疑,因为您正在从0迭代到cards[i+1]
i
处于其最大值时,调试器会说什么?在调试器下运行它(你不知道使用什么工具,所以我不能更具体),它会告诉你哪一行出错了什么是“总线错误”?首先,你的cout语句缺少引号。包含卡的行[i+1]->getFace()看起来有点可疑,因为您正在从0迭代到i
达到其最大值时使用
cards[i+1]
。调试器会说什么?在调试器下运行它(你不知道toolchian使用的是什么,所以我不能说得更具体)它会告诉你是哪一行造成的,什么是“总线错误”?如果
cards.size()
为零怎么办?也许
为(i=1;i
而不是
i
0<-1
这是假的,所以它根本不做循环。
cards.size()
通常是一个无符号整数(至少对于STL容器而言)。在这种情况下,如果
cards.size()
为零,则从中减去一将导致无符号大小类型的最大值。这意味着如果
size(),循环将运行
为零,因为
0<0xFFFFFFFFu
,假设大小类型为32位无符号整数。如果
cards.size()
为零会怎么样?可能是(i=1;i
i
0<-1
为假,因此它根本不执行循环。
cards.size()
通常是一个无符号整数(至少对于STL容器而言)。在这种情况下,如果
cards.size()
为零,则从中减去一将导致无符号大小类型的最大值。这意味着如果
size(),循环将运行
为零,因为假定大小类型为32位无符号整数,因此
0<0xFFFFFFFFu