是内存泄漏,还是函数调用的限制,还是什么?

Ang*_*uty 1 c memory

我正在编写一个使用大量递归函数的C程序.我还使用动态列表来存储一些数据,同时递归.我实现了Push功能将数据推送到列表中.

几次调用推送功能"> 17,000次"后,我收到以下错误:

Prob中0x77963c47处的未处理异常 - Cap CE.exe:0xC00000FD:堆栈溢出.
return HeapAlloc(_crtheap, 0, size ? size : 1);那里从stack->listNode = malloc(sizeof(struct Node));Push函数调用.

我打开任务管理器,发现我还有很多可用内存.所以我猜这不是内存泄漏问题.

我可以添加到列表中的数量是多少,或者我可以调用多少次函数?

cni*_*tar 9

为进程分配的堆栈大小是固定的.因此,即使系统有足够的内存,您也可以溢出堆栈.

更重要的是,你的过程本身通常有足够的内存.它只是堆栈非常小.

  • - >使方法迭代.这不会像递归方法那样使用尽可能多的堆栈. (3认同)

Lig*_*ica 5

"> 17,000次"不是"几次".这是血腥的负荷.

你不能指望你的堆栈可以容纳17,000个帧(它可以容纳多少是依赖于实现的,并且还取决于每帧中有多少数据).

请改用迭代.