什么导致堆栈溢出?

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

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

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

解决方法

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

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

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

递归

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

int recurse(int number) {

    return (recurse(number));
}

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

大局部变量

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

void hugeStack (void) {

    unsigned long long reallyBig[100000000][1000000000];

    ...
}

这个similar question一个非常详细的答案.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...