由于递归函数导致的分段错误

时间:2020-04-23 10:07:03

标签: c

我不太擅长C编程。因此,当我编写此递归函数时,我遇到了分段错误(内核已转储)。

int ispra(char* dir, char* proc, int num, int origin) {
    FILE *newfile;
    //printf("%s\n", dir);
    char* s;
    char* buff;

    s = (char*) calloc(100, sizeof(char));
    strcpy(s, dir);
    strcat(s, "/");
    strcat(s, proc);
    strcat(s, "/status");

    newfile = fopen(s, "r");

    while(1) {
        buff = (char*) calloc(100, sizeof(char));
        int pid;
        char* gran = (char*) calloc(10, sizeof(char));
        int ppid;

        fscanf(newfile, "%s", buff);

        if (strcmp(buff, "Pid:") == 0) {
            fscanf(newfile, "%d", &pid);

            if (pid == num) {
                return 1;
            }
        }
        if (strcmp(buff, "PPid:") == 0) {
            fscanf(newfile, "%s", gran);

            ppid = atoi(gran);

            if (ppid == origin) {
                return 0;
            }


            int new = ispra(dir, gran, num, origin);
            break;
        }

        free(buff);
    }

    free(s);

    return -1;
}

因此,基本上,该函数从给定文件中读取并查找与变量num匹配的内容。在添加递归调用之前,所有方法都工作正常。递归调用用于获取变量new。 进行递归调用时,我遇到了错误,也不知道如何使它起作用。

0 个答案:

没有答案