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

How To Fix Stack Corruptions Caused By Generating Random Enumeration Values?

我正在使用 Win32 API 制作 CCG(集体纸牌游戏),但我 运行 出错了。

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

enum cardnames {ArcaneExplosion, ArcaneIntellect, ArcaneMissiles};

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

cardnames playercards[2];

然后我使用 运行d() 函数将对象设置为 运行dom 枚举。

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

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

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

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

您的数组值太小了。您声明:

cardnames playercards[2];

但是你稍后写信给 playercards[2]:

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

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

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