我认为这会很学术,但事实并非如此。我正在尝试遍历目录尝试(递归)。但是,在调用 readdir() 时,我不断收到以下消息:
./xsed.bin
make: *** [run] Segmentation fault
通过程序进行跟踪时,GDB 具有以下输出:
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(".");
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);
}
}
我不知道参数(dirp)如何在对 readdir() 的调用中变为 NULL。注意:这是在第一次调用 recurseDir() 期间发生的,根本没有递归发生。我离开了还是这是编译器/机器的事情?
请帮忙!!!!