gpt4 book ai didi

c++ - vector 和堆栈溢出

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:59 26 4
gpt4 key购买 nike

解释我的问题:

我有一个名为敌人 的简单 vector 数组,它包含敌人 的对象。在我的游戏关卡的关卡选择菜单中,当玩家点击一个关卡时,我会将该给定关卡的所有敌人推回到 vector 数组中。

目前我只有 3 个关卡完全完成了他们所有的敌人,今天在尝试完成第四个关卡时,现在我不断出现堆栈溢出。而且我不确定为什么会发生这种情况,我的意思是,当我首先到达级别选择菜单然后按键盘上的任何内容时,肯定只会为数组分配任何内容,但不会立即崩溃。

所以就伪代码而言,这就是我所做的:

switch(keyboardInput)
//ALL keyboard button specific input
default:
if (levelSelected == 1)
//push back level 1 enemies into vector
elseif (levelSelected == 2)
//push back level 2 enemies into vector etc. etc.

就被插入 vector 数组的数字而言:

1 级 = 26 个敌人

2 级 = 113 个敌人

3 级 = 204 个敌人

第 4 关 = 38 个敌人(创建这个关卡还不到一半)

总计 = 381 个敌人。

注释掉我刚刚为第 4 级添加的一些 vector 推回,然后游戏运行良好。但显然这是一个我需要克服的问题,这样我才能将敌人分配到关卡中。

它在文件“chkstk.asm 上崩溃以供引用。所以我对此有点困惑,为什么会发生这种情况是我的主要问题?希望我应该如何克服这个问题?

非常感谢任何帮助!

编辑:因此,为了回答一些问题,我没有在我的代码中使用任何类型的递归,为了更好地了解错误,这里是屏幕截图

Error Returned

我总共加载了 86 张图片和 3 种字体。但即使评论其中的一些,我仍然会收到上面相同的错误消息。唯一值得注意的是 Enemies 类本身。但具体来说,所有的东西都是一些变量和一些动画。每个敌人总共有 4 个动画可用,有些有动画有些没有。我将在下面发布动画类; http://pastebin.com/X3GUgJiJ - 标题

http://pastebin.com/pL1iEkiy - .cpp 内容。

即便如此,我也不确定那里是否有任何显着的内存占用。

编辑二:所以这是我的级别选择代码的链接,它非常大。大多数代码本身都与关卡选择屏幕相关,并且也渲染正确的图像。 http://txtup.co/YLVRo

编辑三:注释掉所有被推回 vector 数组的敌人会导致令人惊讶的结果,关卡加载代码会抛出一个错误,这可能只是由于其他任何东西弄乱了堆栈,或者实际上是在搞乱加载代码堆栈?我不知道。但这是级别错误的图像: http://imgur.com/2fySY

编辑四:因此,在查看代码的漫长任务之后,看看可能导致问题的原因我想我可能有一个理论;所以每个 Enemy 对象都有可能拥有/使用 4 种不同的动画。确实有 5 个,但说来话长,对于不同大小的敌人,一个动画基本上有 2 个不同版本。因此,如果我们将其放入某些图形中,这些动画就是它们自己的名为 Animation 的类。是不是每个被推回数组的敌人对象都会包含它自己的所有可用特定动画的实例,因此随着时间的流逝,我添加了越来越多的敌人,我不知道的问题越来越多越来越差。

我的意思是总共有 1524 个动画实例,目前我几乎注释掉了大部分代码。我认为大多数大问题可能是导致问题的原因,慢慢地,我取消了尝试尝试的行的注释,以确保这实际上是正确的。现在的问题是应该怎么办?

最佳答案

堆栈溢出的潜在原因只有三种:

  1. 无限/过度的函数递归。
  2. 在堆栈上分配过大的对象。
  3. 改写栈帧链接指针。
    • 可能是栈上数组缓冲区溢出造成的
    • 或使用过期指针或对局部变量的引用。

这些都不可能是滥用 vector 造成的。可能与 push_back 相关的事情加剧了先前存在的问题。

如果您想发挥大作用,试试 Valgrind。但看起来您需要将事情归结并删除不必要的细节。不要太在意特定的数字。如果程序编写得当,1524个动画实例应该和2个一样。

关于c++ - vector 和堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597980/

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