您可能认为这是一个巧合,我的问题的主题类似于论坛的名称,但我实际上通过谷歌搜索“堆栈溢出”一词来到这里.
我使用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有一个非常详细的答案.