You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言目录树程序递归函数调用引发段错误的问题排查

递归目录处理函数段错误原因分析

1. 未过滤特殊目录条目.和..,引发无限递归栈溢出

目录默认包含.(当前目录)和..(上级目录)两个特殊条目,代码未对这两个条目做跳过处理。递归调用时会反复处理当前目录与上级目录,造成无限递归,最终栈空间耗尽触发段错误。这是导致你看到"subdir1"打印后立刻崩溃的核心原因之一。

2. 错误释放栈上分配的数组

代码中struct dirent entries[MAX_DIR];是栈上自动分配的数组,却在函数末尾调用free(entries);。free仅允许释放堆内存(malloc/calloc等函数分配的空间),释放栈内存属于未定义行为,直接会触发段错误。

3. opendir失败后未终止函数执行

当opendir(dn)返回NULL(比如路径无效、权限不足),代码仅打印错误信息但未执行return终止函数,后续会继续使用空指针d调用getNext(d),直接触发段错误。

4. 递归调用时路径逻辑缺陷

递归调用传入的this.d_name仅为子条目名称,并非完整路径。如果程序当前工作目录与dn指向的目录不一致,opendir会找不到目标路径;即使路径暂时有效,结合未过滤.的问题,依然会陷入无限递归。

5. 未关闭目录流导致资源泄漏

打开目录后未调用closedir(d)关闭目录流,递归场景下会快速耗尽系统允许打开的文件描述符,导致后续opendir失败,间接引发错误。


内容的提问来源于stack exchange,提问作者flo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:20:20