我正在使用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/

10-11 16:37