



如果没有加83行的globfree函数会正常执行,加了就会出错,说啥核心已存储,实现的递归的显示一个目录的所有内容




以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
从您提供的代码片段来看,问题可能出在globfree(&pglob);这一行。globfree函数用于释放glob结构体及其分配的内存。在您的递归函数ls_R中,每次递归调用都会创建一个新的glob_t结构体,但在递归返回之前,您试图释放这个结构体。这可能导致未定义的行为,因为当递归返回时,这些结构体可能仍然被使用。
为了解决这个问题,您可以在递归调用结束后释放glob_t结构体。这里是一个修改后的代码示例:
void ls_R(char* argv) {
glob_t pglob;
int y = is_dir(argv);
if (y == -1) {
printf("glob error");
return;
}
if (y == 1) {
printstat(argv);
strcat(argv, "/*");
glob(argv, 0, NULL, &pglob);
for (int i = 0; i < pglob.gl_pathc; i++) {
ls_R(pglob.gl_pathv[i]);
}
globfree(&pglob); // 将此行移至循环外,确保在所有递归调用完成后释放内存
} else if (y == 0) {
printstat(argv);
}
}
这样,您可以确保在不再需要glob_t结构体时释放其内存。请注意,我假设您的其他代码(如is_dir和printstat函数)是正确的。如果这些函数存在问题,那么您可能需要进一步检查它们。