首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Segfault调用readdir() -目录遍历

Segfault调用readdir() -目录遍历
EN

Stack Overflow用户
提问于 2012-02-05 13:06:44
回答 1查看 2.9K关注 0票数 0

我原以为这会很学术,但事实并非如此。我正试图(递归地)遍历一个目录try。但是,在调用readdir()时,我一直收到以下消息:

代码语言:javascript
复制
 ./xsed.bin
 make: *** [run] Segmentation fault

在跟踪程序时,GDB会有以下输出:

代码语言:javascript
复制
Breakpoint 1, recurseDir (path=0x401090 ".") at xsed.c:216
216             DIR *currD = opendir(path);
(gdb) n
217             if( currD = NULL)
(gdb) n
226                     entry = readdir(currD);
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7afef86 in __readdir (dirp=0x0) at ../sysdeps/unix/readdir.c:45
45      ../sysdeps/unix/readdir.c: No such file or directory.
    in ../sysdeps/unix/readdir.c

我读过几个地方,永远不会在同一个Dir*对象上调用readdir()两次。当我调用它一次时,我得到了一个段错误。我已经检查了路径字符串以确保它是正确的(例如使用“.或"./“等)--没有运气。

下面是代码:像这样调用: recurseDir(getcwd(currD,256))或recurseDir(".");

代码语言:javascript
复制
  void recurseDir(char *path)
  {

    DIR *currD = opendir(path);
    if( currD = NULL)
    {
            fprintf(stderr,"Could not open directory: %s\n",path);
            return;
    }
    else
    {
            struct dirent *entry;
            char *dName;
            entry = readdir(currD); <--- segfault

            if( entry == NULL)
            {
                    fprintf(stderr,"Error reading directory.\n");
                    return;
            }

            dName = entry->d_name;
            printf("Current dir:%s\n",dName);

      }
   }

我不知道readdir()调用中的参数(dirp)是如何变成空的。注意:这是在第一次调用recurseDir()时发生的,根本不会发生递归。我走了,还是这是编译器/机器的问题?

请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-05 13:09:36

首先,你有if( currD = NULL)。你可能指的是==而不是=。是的,这绝对可以解释为什么你的currD是空的。:-)

顺便说一句,有些人更喜欢编写NULL == currD来防止这种情况。或者你可以直接说!currD

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9147060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档