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

Pla*_*mer 6 c++ stack-overflow

我刚刚遇到一个问题,当一个本地对象试图调用一个非常简单的过程时,HPUX上的线程c ++程序中的堆栈溢出导致SEGV_MAPERR.我有一段时间感到困惑,但幸运的是我和那些认识到这是堆栈大小问题的人交谈过,我们能够通过增加线程可用的堆栈大小来解决问题.

如何识别堆栈何时溢出?在windows/linux/hpux上症状有所不同吗?

Dou*_* T. 10

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

你可以写一下来自CPU的温度读数,它可能是你给Larry输入的电子邮件,可能有点说内核被锁定,导致一个有趣的死锁条件!谁知道.

至于C++,没有什么可以说堆栈应该如何与内存中的其他内容相关联,或者这个东西甚至需要是一个堆栈!


Chr*_*ies 2

如何识别堆栈何时溢出?

如果您知道堆栈大小、堆栈开始位置以及堆栈在内存中增长的方向,则可以简单地检查堆栈指针的地址并查看它是否超过堆栈末尾。C++ 不允许直接访问堆栈指针。您可以轻松地用汇编语言编写一个小函数来执行此分析并将其链接到您的程序中。