社区
C语言
帖子详情
为什么使用递归分配存储空间会出现意想不到的错误
yhh_satan
2002-05-18 11:25:49
前几天,本人使用一个递归函数来生成一个链表,却老是发生错误,且对于函数本身
已经检验多遍,绝无错误。而后来我使用循环代替了递归,结果程序运行正常,故我
在这里想请问各位高手此问题应当怎样解决,是否是在 递归压栈的时候发生了错误
...全文
53
7
打赏
收藏
为什么使用递归分配存储空间会出现意想不到的错误
前几天,本人使用一个递归函数来生成一个链表,却老是发生错误,且对于函数本身 已经检验多遍,绝无错误。而后来我使用循环代替了递归,结果程序运行正常,故我 在这里想请问各位高手此问题应当怎样解决,是否是在 递归压栈的时候发生了错误
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
codingcoding
2002-05-19
打赏
举报
回复
因为每次递归的时候,函数的参数都要压栈。如果递归层次很深的话。那么压进去的参数就很多了。因为堆栈是有限的。就会造成栈溢出。产生错误。
cwizard
2002-05-19
打赏
举报
回复
在用递归建立链表是非常耗费存储空间的,如果递归的深度大些,就会因为内存不足而发生错误,这是由递归的实现原理决定的,递归要建立递归函数栈,毕竟存储空间中堆栈空间是有限的,你可以试一试,用递归写一个从1加到n的累加程序,使n 不断增大,看n多大时会发生错误
dark_zy
2002-05-19
打赏
举报
回复
你自己说对了
在递归的时候,进入递归前
需要把所有内存或寄存器有关的内容压栈
当你用递归生成链表时,链表的上一个结点地址已经是在栈中(不一定是栈顶),此时,你就不能直接把新链表结点跟链表连接,否则会出错
所以生成链表的大都是用循环,很少用递归,除非你可以把链表的结点地址的进/出栈处理得很好(象自己新建一个栈,专门存储链表结点地址,不过这也没必要,用循环就很好了,省空间)。
僵哥
2002-05-18
打赏
举报
回复
首先,你懂不懂递归?我是不懂,所有用起来不是不得已简化的话还要考虑考虑。
illia
2002-05-18
打赏
举报
回复
在别人的机器上能不能跑啊?
把程序贴出来
illia
2002-05-18
打赏
举报
回复
在别人的机器上能不能跑啊?
把程序贴出来
yhh_satan
2002-05-18
打赏
举报
回复
前几天,本人使用一个递归函数来生成一个链表,却老是发生错误,且对于函数本身
已经检验多遍,绝无错误。而后来我使用循环代替了递归,结果程序运行正常,故我
在这里想请问各位高手此问题应当怎样解决,是否是在 递归压栈的时候发生了错误
本人用的是 c,编译器为turbo c++
函数调用栈和
递归
函数分析以及尾
递归
、缓冲区溢出的讲解
知乎上有大神曾经说
递归
有时候更像去查字典,我们一开始想要知道这句话什么意思,里面有词语不认识,查字典,字典的解释又有新的我们不认识的词语,然后一直查找,直到我们弄懂了,我们开始回去理解上一层词语的意思...
内存
分配
、内存溢出和内存泄漏
内存泄漏
会
导致程序不稳定,如果是在一个非常复杂的项目中去排查一处内存泄漏的地方,也是非常让人头疼的一件事情,与其研究如何更好地解决问题,不如研究如何避免问题的发生。
详解程序的内存
分配
内存分为代码区、全局数据区、堆区和栈区。堆一般存放动态数据,栈里一般存放局部成员。...为什么全局变量和本地变量在
分配
内存地址时要分别对待,堆和堆栈哪一个更有效率? [回答] 在Window中执行的每一个应
调试段
错误
和指针问题
“段
错误
(core dumped)”是个非常模糊的
错误
信息,更糟糕的是,当奇怪的bug
出现
但是这个bug不
会
引起段
错误
--但可能导致内存以一种
意想不到
的方式被重写。 但是发现指针引发的问题比你想像中要简单。这些段...
C++内存
分配
和管理
也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都
会
发生,因此要想成为C++高手,...
C语言
69,372
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章