无限循环调用递归函数

问题描述 投票:0回答:0

ok 所以我想编写一个函数来查找给定目录作为输入的所有子目录。它还接受一个 int,以便可以跟踪级别。 返回值应该是一个 char* 数组,其中列出了所有子目录。 我认为递归函数更可取,但是我在设置正确的算法时遇到了麻烦。 该程序运行但在第二个子目录中它似乎无限期地阻塞。 代码如下(dict是一个模仿hashmap的struct):

char *search_dir(char* directory, int i) {
   struct dirent *de;
   DIR *dir;
   dir = opendir(directory);
   de = readdir(dir);
   struct stat st;
   struct dict *d = NULL, **l; //linked list
   l = &d;
   
   char *parent_name = malloc(MAXSIZE);
   char *pardir = (char*) malloc(sizeof(char*) * MAXSIZE);
   char *subdir = (char*) malloc(sizeof(char*) * MAXSIZE);
   memset(parent_name, "\0", sizeof(parent_name));
   char *result = malloc(MAXSIZE);
   if(dir != NULL) {
       while(de != NULL) {
           *l = malloc(sizeof(**l) * 500);
           lstat(de -> d_name, &st);
           if(S_ISDIR(st.st_mode)) {
                strcpy(parent_name, directory);
                printf("PARENT_NAME INIT %s\n", parent_name);
                (*l) -> key = parent_name;
                (*l) -> value = de -> d_name;
                printf("LVALUE%s\n", (*l) -> value);
                (*l) -> idx = i;
                strcpy(subdir, de -> d_name);
                printf("SUBDIR%s\n", subdir);
                sprintf(pardir, "%s%s", parent_name, subdir);
                printf("PARDIR%s\n", pardir);
                snprintf(subdir, "%s%s", pardir, subdir);
                i++;
                l = &(*l) -> next;
                search_dir(subdir, i);
                strcpy(result[i], pardir);
                if(d -> value == NULL) {
                    pardir = "\0"; // exit cycle
                    break;
                }
           }
      }
      free(*l);
      free(d);
  }
  free(parent_name);
  return result;

}

c recursion search directory infinite
© www.soinside.com 2019 - 2024. All rights reserved.