在 Debian(或任意 Linux)下,如果你说的是 C/C++ 里使用 readdir() / readdir_r() 读取目录后如何释放内存,要分几种情况来看。
readdir()(最常用)#include <dirent.h>
DIR *dir = opendir("/path");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 使用 entry->d_name
}
closedir(dir);
readdir() 返回的是一个指向静态内部缓冲区的指针free(entry)closedir(dir);
closedir() 会释放 opendir() 分配的内存✅ 正确示例:
DIR *dir = opendir(path);
if (!dir) { perror("opendir"); return; }
while (readdir(dir)) {
// 不需要 free
}
closedir(dir); // 释放内存
readdir_r()(线程安全版本,已废弃)struct dirent entry;
struct dirent *result;
readdir_r(dir, &entry, &result);
entry 是你自己分配的栈变量freeclosedir(dir);
⚠️ 注意:readdir_r() 在 glibc 2.34+ 已废弃,推荐直接用 readdir()
如果你做了类似:
char *name = strdup(entry->d_name);
那你需要:
free(name);
否则会内存泄漏。
free(entry); // 错误!
free(dir); // 错误!
正确只有:
closedir(dir);
Debian / Linux 下使用
readdir():
- 不要
free(readdir 的返回值)- 只用
closedir()释放资源
如果你指的是 Python / Go / 其他语言,或者 内核态 readdir,可以告诉我具体语言。