矢量&堆栈溢出

时间:2012-07-22 05:36:37

标签: c++ vector stack-overflow

解释我的问题:

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

目前我只有3级完全完成他们所有的敌人,今天在尝试做第四级时,现在我不断得到堆栈溢出。而且我不确定为什么会发生这种情况,我的意思是阵列只有在我首先到达水平选择菜单然后按键盘上的任何东西时才分配任何东西,但不会马上崩溃。

所以就pseduo代码来说,这就是我的所作所为:

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.

就正在推入矢量数组的数字而言:

等级1 = 26个敌人

等级2 = 113个敌人

等级3 = 204个敌人

4级= 38个敌人(创建此级别后,其中一半完成

总共= 381个敌人。

评论我刚刚为第4级添加的一些矢量推回然后游戏运行正常。但显然这是一个我需要克服的问题,允许我将敌人分配到关卡。

它在文件“ chkstk.asm 上崩溃以供参考。 所以我对此感到有些困惑,为什么这件事发生的确是我的主要问题?希望我该如何克服这个问题?

任何帮助都非常感谢!

编辑: 所以为了回答一些问题,我不会在我的代码中使用任何类型的递归,并且为了更好地查看错误,这里是一个截图

Error Returned

我正在加载86张图片和3种字体。但即使评论其中的一些我仍然得到上面相同的错误信息。 值得注意的唯一另一件事就是实际的敌人类本身。但具体而言,所有这些都是一些变量和一些动画。总共每个敌人有4个动画,有些动画有些没有。 我将在下面发布动画类; http://pastebin.com/X3GUgJiJ - 标题

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

即便如此,虽然我不确定那里有什么显着的内存占用。

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

编辑三: 注释掉被推回到向量数组中的所有敌人都会导致令人惊讶的结果,级别加载代码会引发错误,这可能只是导致其他任何混乱堆栈的结果,或者它实际上是加载代码是搞乱的堆栈?我不确定。 但这是一个级别错误的图像: http://imgur.com/2fySY

编辑四: 因此,在查看代码的长期任务之后,看看可能导致问题的原因我认为我可能有一个理论; 因此每个Enemy对象都有可能拥有/使用4种不同的动画。 5真的,但它的故事很长,对于不同大小的敌人,基本上有两个不同版本的动画。 因此,如果我们将其放入某些数字中,这些动画就是他们自己的名为动画的类。是因为推回到阵列中的每个敌人对象都将包含自己所有可用的特定动画的实例,因此随着时间的推移,我已经添加了越来越多的敌人,我不知道的问题已经增长越来越差。

我的意思是总共 1524 动画实例,目前我几乎已经对大部分代码进行了评论。我认为大多数重要的事情都可能导致这个问题,慢慢地我不会评论尝试的事情,确保这事实上是正确的。 现在问题仍然是应该做什么?

1 个答案:

答案 0 :(得分:1)

堆栈溢出只有三个可能的原因:

  1. 无限/过度函数递归。
  2. 在堆栈上分配过大的对象。
  3. 覆盖堆栈帧链接指针。
    • 可能是由于堆栈上数组缓冲区溢出造成的。
    • 或使用过期的指针或对局部变量的引用。
  4. 这些都不会导致误用vector。可能与push_back相关的事情正在加剧先前存在的问题。

    如果你想拿出大枪,试试Valgrind。但看起来你需要把东西煮沸并去除不必要的细节。不要那么关心特定的数字。如果程序写得正确,1524动画实例应该与2相同。