我正在使用Win32 API制作CCG(集体卡片游戏),但我遇到了错误。
我创建了一个枚举,其中包含来自 Hearthstone (A Popular 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;
但是,这导致了堆栈损坏错误,而且我对内存的工作方式知之甚少。有人可以帮我修复这个bug吗?
答案 0 :(得分:3)
你的数组太小了。你声明了:
cardnames playercards[2];
但后来你写信给playercards[2]
:
playercards[2] = cardnames(rand() % 2 + 0);
这将具有未定义的行为,因为您在数组之后立即写入堆栈内存。谁知道哪些数据被删除了?
请记住,您可以使用的最大索引比数组大小少。