gpt4 book ai didi

c++ - 缓冲区溢出 c++,线程已退出,代码为 0 (0x0)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:18 25 4
gpt4 key购买 nike

我正在使用 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 建议我搜索“How to debug buffer overrun issues”,但我找不到任何与正在发生的事情相关的内容。使用调试器,我将范围缩小到

deckRank[i] = deckCopy[index] / 10;

我不知道为什么会发生这种情况,但它发生在第一次迭代中。如果有人能解释为什么会发生这种情况或提供解决方案,我们将不胜感激。

最佳答案

错误发生在第一行之前的前一个循环嵌套中。您在这里浏览 5 副牌,而不是 4 副牌:

for(int y = 0; y <= 4; y++){

我想你的意思是:

for(int y = 0; y < 4; y++){

此外,您的随机播放例程虽然可以运行,但运行速度会非常慢。你应该查一下 Fisher-Yates shuffle技术,或使用 std::shuffle<> 如果您被允许使用 C++ 标准算法。

关于c++ - 缓冲区溢出 c++,线程已退出,代码为 0 (0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com