Динамическое управление памятью Фибоначчи - PullRequest
0 голосов
/ 25 октября 2019

В настоящее время я разрабатываю Фибоначчи для проекта, у меня были некоторые проблемы с управлением памятью. Во время реализации я выполняю итеративную структуру с for и рекурсивной функцией rfib. Кажется, что проблема с памятью, хотя процесс печати все в порядке. Ошибка, показанная после модификаций: нижний 1 (процесс 8076) вышел нормально

void rfib(int *fib, int x, int last);
int main (int argc, char *argv[]) {
    int N,x;
    int *s = NULL; 
    char *str, *str2;

    if(argv[1] == NULL) {
        exit(1);
    }

    N = atoi(argv[1]);

    s = malloc(sizeof(int)*N);
    str = malloc(sizeof(char)*N);
    str2 = malloc(sizeof(char)*N);  

    if (s==NULL) {
        exit(1);
    }

    s[0]=0;
    s[1]=1;

    // Calculate Fibonacci Serie.
    for (x=2;x<N;x++) { 
        s[x] = s[x-2] + s[x-1];  
    }
    // Print Fibonacci Serie.
    str2 = "Iterative Fibonacci Calculation";
    for (x=0;x<N;x++) {
        sprintf(str,"%s %d: %d\n",str2, x, s[x]);
        write(1,str,strlen(str));
    }

    rfib(s,0,N);

    //Print Fibonacci Serie.
    str2 = "Recursive Fibonacci calculation";
    for (x=0;x<N;x++) {
        sprintf(str,"%s %d: %d\n", str2, x, s[x]);  
        write(1,str,strlen(str));
    }

    str2 = NULL;
    str = NULL;
    s = NULL;
    free(str2);
    free(str);
    free(s);    
    exit(0);
}


void rfib(int *fib, int x, int last) {
    if (x == 0) {
        fib[0] = 0;
    } else if (x == 1) {
        fib[1] = 1;
    } else if (x > 1) {
        fib[x] = fib[x-1] + fib[x-2];
    }

    if (x != last) {
        rfib(fib,x + 1,last);
    }
}
...