当前位置:  开发笔记 > 编程语言 > 正文

什么导致堆栈溢出?

如何解决《什么导致堆栈溢出?》经验,为你挑选了1个好方法。

您可能认为这是一个巧合,我的问题的主题类似于论坛的名称,但我实际上通过谷歌搜索"堆栈溢出"一词来到这里.

我使用OPNET网络模拟器,我使用C编程.我认为我遇到了大数组大小的问题.看来我正在达到某种内存分配限制.它可能与OPNET,Windows,我的笔记本电脑内存或最有可能的C语言有关.当我尝试使用具有数千个整数的元素总数的嵌套数组时,会导致该问题.我认为我超出了整体内存分配限制,我想知道是否有办法增加这个上限.这是确切的问题描述:

我基本上有一个路由表.我们称之为routing_tbl [n],这意味着我支持30个节点(路由器).现在,对于此表中的每个节点,我保留信息.大约有很多(数百个)可用路径,在一个名为paths [p]的数组中.同样,对于此数组中的每个路径,我将属于它的节点列表保存在名为hops [h]的数组中.所以,我至少使用了nph整数值的内存,但是这个表也包含其他信息.在同一个函数中,我也使用另一个嵌套数组,它也消耗了近40,000个整数.一旦我运行我的模拟,它就会退出抱怨堆栈溢出.当我减少路由表的总大小时,它可以工作.您认为导致问题的原因是什么?如何解决?非常感谢阿里



1> Andrew Johns..:

如果您发布一些代码可能会有所帮助.编辑问题以包括问题功能和错误.

同时,这是一个非常通用的答案:

堆栈溢出的两个主要原因是1)递归函数,或2)大量局部变量的分配.

递归

如果你的函数调用自己,就像这样:

int recurse(int number) {

    return (recurse(number));
}

由于局部变量和函数参数存储在堆栈中,因此它将填充堆栈并导致堆栈溢出.

大局部变量

如果您尝试分配大量的局部变量,那么您可以轻松地溢出堆栈.像这样的函数可能会导致问题:

void hugeStack (void) {

    unsigned long long reallyBig[100000000][1000000000];

    ...
}

这个类似的问题有一个非常详细的答案.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有