代码之家  ›  专栏  ›  技术社区  ›  Plasmer

C++程序中堆栈溢出的症状是什么?

  •  6
  • Plasmer  · 技术社区  · 15 年前

    我刚刚遇到了一个问题,当一个本地对象试图调用一个非常简单的程序时,在HPUX上的一个带线程的C++程序中,一个堆栈溢出引起了SevvyMaPrr。有一段时间我很困惑,但幸运的是,我和一个认识到这是堆栈大小问题的人谈过,我们通过增加线程可用的堆栈大小来解决这个问题。

    如何识别堆栈溢出的时间?Windows/Linux/HPUX上的症状有区别吗?

    5 回复  |  直到 8 年前
        1
  •  2
  •   Chris de Vries    15 年前

    如何识别堆栈溢出的时间?

    如果您知道堆栈的大小、堆栈的起始位置以及堆栈在内存中的增长方向,那么只需检查 stack pointer 看看它是否超过了堆栈的末尾。C++不允许直接访问堆栈指针。您可以很容易地在程序集中编写一个小函数来执行这个分析,并将它链接到您的程序中。

        2
  •  10
  •   Doug T.    15 年前

    假设你不在一个会停止你的应用程序并说“堆栈溢出”的平台上,我怀疑你会看到与任何类型的缓冲区溢出相同的行为。堆栈只是程序的另一个预分配内存块,如果超出了这些限制…祝你好运!谁知道你会踩到什么!

    你可以把CPU的温度读数写下来,也可以是你给Larry打的邮件,也可以是有点说内核被锁定了,导致了一个有趣的死锁状态!谁知道呢。

    至于C++,没有什么说堆栈应该与内存中的其他事物相关,或者这个东西甚至需要堆栈!

        3
  •  0
  •   MSN    15 年前

    异常代码 0xC00000FD 在Windows上。

    通常,当你意识到你的SEH停止工作时,诊断起来更容易。

        4
  •  0
  •   T.E.D.    15 年前

    也许有点离题,但ADA中的分析性问题(任务中堆栈空间不足)是一个相当常见的“不常见”错误。许多编译器将停止任务(但不是主任务),并出现程序错误异常。

    在某种程度上,你几乎必须能够嗅出这个。它往往从“我在任务中移动了这个大数组,突然它停止工作”这样的事情开始。

        5
  •  -1
  •   david n laine    8 年前

    将文本输出到屏幕,与测试程序中的代码行混合在一起。以前的bash命令和其他不明来源的文本也存在。添加到所有程序文本损坏的内容中。