如何修复由生成随机枚举值引起的堆栈损坏?
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);
这将有未定义的行为,因为您在 数组后立即写入堆栈内存。谁知道哪些数据被丢弃了?
请记住,您可以使用的最大索引比数组大小少。
我正在使用 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);
这将有未定义的行为,因为您在 数组后立即写入堆栈内存。谁知道哪些数据被丢弃了?
请记住,您可以使用的最大索引比数组大小少。