gpt4 book ai didi

c++ - 如何修复由生成随机枚举值引起的堆栈损坏?

转载 作者:行者123 更新时间:2023-11-28 00:13:12 25 4
gpt4 key购买 nike

我正在使用 Win32 API 制作 CCG(集体纸牌游戏),但我遇到了错误。

为了测试目的,我用炉石(一种流行的 CCG)中不同卡片的名称创建了一个枚举。

enum cardnames {ArcaneExplosion, ArcaneIntellect, ArcaneMissiles};

然后我创建了一个名为“Player Cards”(其中 3 个)的枚举对象数组。

cardnames playercards[2];

然后我使用 rand() 函数将对象设置为随机枚举。

playercards[0] = cardnames(rand() % 2 + 0);
playercards[1] = cardnames(rand() % 2 + 0);
playercards[2] = cardnames(rand() % 2 + 0);

然后最终将枚举打印到控制台窗口。

cout << playercards[0] << endl;
cout << playercards[1] << endl;
cout << playercards[2] << endl;

但是,这导致了堆栈损坏错误,而且我对内存的工作原理不是很了解。有人可以帮我修复这个错误吗?

最佳答案

你的数组是一个太小的值。你声明:

cardnames playercards[2];

但随后您写信给 playercards[2]:

playercards[2] = cardnames(rand() % 2 + 0);

这将有未定义的行为,因为您在数组之后 立即写入堆栈内存。谁知道哪些数据被丢弃了?

请记住,您可以使用的最大索引比数组大小少一个

关于c++ - 如何修复由生成随机枚举值引起的堆栈损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954699/

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