我已经用C语言编写了一个函数,调用该函数会立即导致堆栈溢出。
原型:
void dumpOutput( Settings *, char **, FILE * );
致电专线:
dumpOutput( stSettings, sInput, fpOut );
在调用它时,stSettings已经是Settings结构的指针,sInput是动态分配的2D数组,并且fpOut是FILE *。它一直到达呼叫线路,没有任何错误,没有内存泄漏等。
实际的功能相当冗长,我认为在这里不值得分享它,因为溢出是在代码进入功能时发生的(我认为称为序言部分)
我尝试直接从main()虚拟变量调用相同的函数,以检查传递的参数是否存在任何问题,但仍会引发堆栈溢出情况。
该错误是由chkstk.asm调用函数时引起的。这个asm文件(根据其中的注释)尝试探测堆栈以检查/分配被调用函数的内存。它只是一直跳到Find next lower page and probe部分,直到发生堆栈溢出为止。
其中的局部变量dumpOutput也不是内存野兽,只有6个整数和2个指针。
进入此功能时,代码使用的内存为60,936K,到堆栈溢出时,内存增加到61,940K。大部分的记忆都进入了sInput。这是错误的原因吗?我不这么认为,因为仅传递了它的指针。其次,我不明白为什么dumpOutput要尝试在堆栈上分配1004K内存?
我在这里完全茫然。任何帮助将不胜感激。
提前致谢。