竹叶风轻敲 2024-08-26 17:33 采纳率: 48.9%
浏览 13
已结题

不是要释放glob_t类型的变量吗为啥会出错

img

img

img


img


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

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-26 17:35
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您提供的代码片段来看,问题可能出在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_dirprintstat函数)是正确的。如果这些函数存在问题,那么您可能需要进一步检查它们。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月2日
  • 创建了问题 8月26日