C++ 打印语句导致的总线错误
好的,我有一个简单的函数,它返回5张牌中最高的非对牌。但我遇到的问题很严重。有一个随机发生的总线错误,我不知道是什么原因。我原以为我用的是打印报表,但现在我不确定。我知道这看起来很乱,但如果你看下面我打印“测试打印”字样的那一行,有人能告诉我为什么在这一行之后立即出现总线错误,并且没有到达第二个“测试打印”语句。我的程序的内存可能用完了吗???这可能没有任何意义,但我真的想不出其他任何东西(请排除稍微令人困惑的代码):C++ 打印语句导致的总线错误,c++,C++,好的,我有一个简单的函数,它返回5张牌中最高的非对牌。但我遇到的问题很严重。有一个随机发生的总线错误,我不知道是什么原因。我原以为我用的是打印报表,但现在我不确定。我知道这看起来很乱,但如果你看下面我打印“测试打印”字样的那一行,有人能告诉我为什么在这一行之后立即出现总线错误,并且没有到达第二个“测试打印”语句。我的程序的内存可能用完了吗???这可能没有任何意义,但我真的想不出其他任何东西(请排除稍微令人困惑的代码): int-Hand::highestNonPair(int*face\u-ar
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
而不是i0<-1
这是假的,所以它根本不做循环。cards.size()
通常是一个无符号整数(至少对于STL容器而言)。在这种情况下,如果cards.size()
为零,则从中减去一将导致无符号大小类型的最大值。这意味着如果size(),循环将运行
为零,因为0<0xFFFFFFFFu
,假设大小类型为32位无符号整数。如果cards.size()
为零会怎么样?可能是(i=1;i
的i0<-1
为假,因此它根本不执行循环。cards.size()
通常是一个无符号整数(至少对于STL容器而言)。在这种情况下,如果cards.size()
为零,则从中减去一将导致无符号大小类型的最大值。这意味着如果size(),循环将运行
为零,因为假定大小类型为32位无符号整数,因此0<0xFFFFFFFFu
。