Я думал, что это будет довольно академично, но это не так.Я пытаюсь просмотреть каталог попробовать (рекурсивно).Тем не менее, я продолжаю получать следующее сообщение при вызове 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
Я никогда не читал несколько мествызвать readdir () дважды для одного и того же объекта Dir *.Я получаю segfault, когда звоню один раз.Я проверил строку пути, чтобы убедиться в ее правильности (например, с помощью «.» Или «./» и т. Д.) - не повезло.
Вот код ниже: Вызывается как: 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) становится равным NULL в вызове readdir ().ПРИМЕЧАНИЕ. Это происходит во время первого вызова recurseDir (), рекурсия вообще не происходит.Я выключен или это компилятор / машина?
Пожалуйста, помогите !!!!