我正在使用c++和Visual Studio2012。出现此错误,线程退出,代码为0(0x0)。
int deckCopy[208]; //will be used for the purpose of shuffling
int index = 0; //will be used to keep track of indexs of the array and to shuffle
//fills the array deck by deck
for(int y = 0; y <= 4; y++){
for(int i = 0; i < 13; i ++){
for(int x = 0; x < 4; x ++){
deckCopy[index] = ((1 + i) * 10) + (x + 1);
index ++;
}
}
}
//shuffle the deck
for(int i = 0; i < 208; i ++){
do{
index = rand() % 208;
cout << deckCopy[index];
deckRank[i] = deckCopy[index] / 10;
deckSuit[i] = deckCopy[index] % 10;
}while(deckRank[i] == 0);
deckCopy[index] = 0;
}
visual studio建议我搜索“如何调试缓冲区溢出问题”,但是我发现与所发生的事情无关。使用调试器,我将其范围缩小到
deckRank[i] = deckCopy[index] / 10;
我不知道为什么会发生这种情况,而且它发生在第一次迭代中。如果有人能解释为什么会这样或提供解决方案将不胜感激。
最佳答案
错误发生在前一个循环嵌套中的第一行之前。您要在这里经过5个套牌,而不是4个套牌:
for(int y = 0; y <= 4; y++){
我想你的意思是:
for(int y = 0; y < 4; y++){
同样,您的随机播放例程虽然可以正常运行,但运行起来非常缓慢。您应该查询Fisher-Yates shuffle技术,或者在允许使用C++标准算法的情况下使用
std::shuffle<>
。关于c++ - 缓冲区溢出c++,线程已退出,代码为0(0x0),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20448824/