题
我只是遇到一个问题,一堆溢出在螺纹c++的程序HPUX造成SEGV_MAPERR当局对象试图呼叫一个非常简单的程序。我感到困惑,但幸运的是我交谈的人认识到这是一堆大小问题我们能够解决该问题通过增加筹码提供给线。
我如何可以识别当堆溢?做的症状不同于windows/linux/hpux?
解决方案
我如何可以识别当堆溢?
如果你知道一堆大小,在那里堆启动和方向它的增长在内存,你可以简单地检查的地址 堆的指针 看看如果它过去的结束。C++不允许直接访问堆的指针。你可以很容易地编写一个小的功能组件来执行这一分析并将其链接到你的节目。
其他提示
假设你不是一个平台上的多数民众赞成要停止你的应用程序,并说“堆栈溢出”我怀疑你会看到,你会从任何缓冲区溢出看到相同的行为。堆栈是内存只是一个预分配的块为您的程序,如果你去那些界限之外...好好运!谁知道你踩在脚下的!
您可以在从CPU温度读数写的,它可能是你输入拉里的电子邮件,也可能是位说核心被锁定,导致一个有趣的死锁条件!谁知道。
至于C ++,没有什么说怎么栈应该相对于在内存中或这件事情,甚至需要一个堆栈进行布局,以其他的东西!
在Windows异常代码0xC00000FD
。
通常更容易,当你意识到你的SEH停止工作来诊断。
或许有点偏离主题,但在阿达的analagous问题(用完的任务堆栈空间)是一种相当常见的“罕见”的错误。许多编译器将停止使用产生Program_Error例外任务(但不是主要任务)。
在某种程度上,你几乎必须能够嗅出这一个。它往往开始像,“我把我的任务里面这个大阵,突然就停止工作。”
输出文本屏幕成为与从被测程序的代码行混合。出席会议的还有以前的bash命令和不明来源的其他文字。添加到所有的程序文本成为损坏。