我正在使用c ++和Visual Studio 2012.我收到此错误,线程已退出,代码为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;
我不知道为什么会发生这种情况,它会在第一次迭代时发生。如果有人能够解释为什么会这样,或者提供一个非常值得赞赏的解决方案。
答案 0 :(得分:2)
错误发生在第一行之前,在前一个循环嵌套中。你在这里经历了5个甲板,而不是4个:
for(int y = 0; y <= 4; y++){
我认为你的意思是:
for(int y = 0; y < 4; y++){
此外,您的随机播放程序虽然可以正常运行但运行速度非常慢。如果允许使用C ++标准算法,则应查找Fisher-Yates shuffle技术,或使用std::shuffle<>
。