C++ 向量&;堆栈溢出

C++ 向量&;堆栈溢出,c++,vector,stack-overflow,C++,Vector,Stack Overflow,为了解释我的问题: 我有一个名为敌人的简单向量数组,它包含敌人的对象。在我游戏中的关卡选择菜单中,当玩家点击某个关卡时,我将该关卡的所有敌人推回向量数组 目前我只有3个等级完全对付他们所有的敌人,今天当我尝试做第四个等级时,现在我不断得到一个堆栈溢出。我不确定为什么会发生这种情况,我的意思是,只有当我首先到达“级别选择”菜单,然后按下键盘上的任何键时,数组才会被分配任何内容,但不会立即崩溃 因此,就PSEDOO代码而言,我的工作如下: switch(keyboardInput) //AL

为了解释我的问题:

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

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

因此,就PSEDOO代码而言,我的工作如下:

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.
就被推入向量数组的数字而言:

一级=26个敌人

二级=113个敌人

三级=204个敌人

四级=38个敌人(创建这个等级还没有完成一半)

总数=381个敌人

我刚刚为第四关添加了一些向量推回,现在游戏运行良好。但很明显,这是一个我需要克服的问题,让我有敌人分配到这些级别

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

非常感谢您的帮助

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

我总共加载了86幅图片和3种字体。但即使对其中的一些进行注释,我仍然会收到上面相同的错误消息。 唯一值得注意的是“真正的敌人”类本身。但具体来说,它只包含一些变量和一些动画。每个敌人总共有4个动画,有些有动画,有些没有。 我将在下面发布动画课程; -标题

-.cpp内容

即使如此,我也不确定是否有任何明显的内存占用

编辑两个: 这是我的关卡选择代码的链接,它相当大。大部分代码本身都是与关卡选择屏幕相关的游戏,也呈现了正确的图像。

编辑三个: 注释掉所有被推回向量数组的敌人会导致令人惊讶的结果,级别加载代码会抛出一个错误,这可能是因为其他任何东西会弄乱堆栈,还是实际上加载代码会弄乱堆栈?我不确定。 但这里有一个级别错误的图像:

编辑四个: 因此,经过一个漫长的代码检查任务后,看看可能是什么导致了这个问题,我想我可能有一个理论; 因此,每个敌人对象都有可能拥有/使用4个不同的动画。5实际上,这是一个很长的故事,对于不同大小的敌人,一个动画基本上有两个不同的版本。 因此,如果我们把它放在一些图中,这些动画是它们自己的类,名为动画。是不是每一个被推回到数组中的敌人对象都会包含它自己的所有可用的特定动画实例,因此随着时间的推移,我添加了越来越多的敌人,我不知道的问题变得越来越严重更糟

我的意思是总共有1524个动画实例,目前我几乎注释了大部分代码。我认为可能是大部分大的事情导致了这个问题,慢慢地,我正在取消注释,尝试一些事情,确保这实际上是正确的。
现在的问题仍然是应该怎么做?

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

  • 无止境/过度的函数递归
  • 在堆栈上分配过大的对象
  • 覆盖堆栈帧链接指针。
    • 可能是堆栈上数组的缓冲区溢出造成的
    • 或者使用过期的指针或对局部变量的引用
  • 所有这些都不可能是由于误用
    向量造成的。可能是与
    推回
    相关的事情加剧了先前存在的问题


    如果你想让大家大显身手,可以试试Valgrind。但看起来你需要把事情简化,去掉不必要的细节。不要太在意具体的数字。如果程序编写正确,1524个动画实例应该与2个相同。

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

  • 无止境/过度的函数递归
  • 在堆栈上分配过大的对象
  • 覆盖堆栈帧链接指针。
    • 可能是堆栈上数组的缓冲区溢出造成的
    • 或者使用过期的指针或对局部变量的引用
  • 所有这些都不可能是由于误用
    向量造成的。可能是与
    推回
    相关的事情加剧了先前存在的问题


    如果你想让大家大显身手,可以试试Valgrind。但看起来你需要把事情简化,去掉不必要的细节。不要太在意具体的数字。如果程序编写正确,1524个动画实例应该与2个相同。

    Vectors将元素存储在堆上,因此不太容易得到a仅仅从正常起诉他们开始就攻击溢出。你需要提供更多的细节。如果崩溃确实是由堆栈溢出引起的,那么你提供的细节是不够的。它不太可能是由任何特定于
    std::vector
    的东西引起的。你的代码中是否在任何地方使用递归?如何定义
    敌人
    类?Psuedo代码i你真正的代码在某处分配了太多的内存,而不是分配了几个v