数组分割故障中的C Fibonacci序列

时间:2017-01-24 16:57:45

标签: c fibonacci

我想将数组填充到斐波纳契数列的n位数。这是我到目前为止所做的:

void fib(int **seq, int n){
    seq = malloc(sizeof(int)*n);

    if(n==1){
        *seq[0] = 0;
    }

    if(n==2){
        *seq[0] = 0;
        *seq[1] = 1;
    }

    if(n>=3){
        *seq[0] = 0;
        *seq[1] = 1;
        *seq[2] = 1;
        for(int i=3; i<n; i++){
            *seq[i] = *seq[i-1]+*seq[i-2];
        }

    }
}

我已经在Python中测试了基本算法并且它按预期工作,但在C中我遇到了分段错误,我不确定它来自何处。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

除了以下错误外,您的程序在大多数部分都是正确的:

(1)Repalce

seq = malloc(sizeof(int)*n);

*seq = malloc(sizeof(int)*n);

请注意,您不应该为双指针分配内存。您应该将内存分配给'seq'指向的指针。

(2)替换所有语句,如

*seq[i]...

(*seq)[i]

请注意,[]具有比*更强的亲和力。所以你需要在所有实例上用括号括起* seq。

(3)您尚未展示如何调用此功能。但我假设你在调用函数之前为双指针分配内存。

这是一个工作程序供您参考:

#include <stdio.h>

void fib(int **seq, int n);

int main()
{
    int ** sequence = malloc(sizeof(int*));       

    fib(sequence, 5);
    for(int x = 0; x < 5; x++)
       printf("%d", (*sequence)[x]);
    return 0;
}

void fib(int **seq, int n){
    *seq = malloc(sizeof(int)*n);

    if(n==1){
        (*seq)[0] = 0;
    }

    if(n==2){
        (*seq)[0] = 0;
        (*seq)[1] = 1;
    }

    if(n>=3){
        (*seq)[0] = 0;
        (*seq)[1] = 1;
        (*seq)[2] = 1;
        for(int i=3; i<n; i++){
            (*seq)[i] = (*seq)[i-1]+(*seq)[i-2];
        }

    }
}

答案 1 :(得分:0)

您正在传递pointer of pointer void fib(int **seq, int n) 而不是尝试分配错误的内存seq = malloc(sizeof(int)*n);

而不是这样做,你可以简单地做

void fib(int *seq, int n){



if(n==1){

    seq[0] = 0;
}

if(n==2){
    seq[0] = 0;
    seq[1] = 1;
}

if(n>=3){
    seq[0] = 0;
    seq[1] = 1;
    seq[2] = 1;
    for(int i=3; i<n; i++){

        seq[i] = seq[i-1]+seq[i-2];
    }

}
}
int main()
{

int n=10;
int *arr=(int*)malloc(sizeof(int)*(n)); // Allocate memory here 
fib(arr,10);
for(int i=0;i<10;i++)
    cout<<arr[i]<<" ";


return 0;
}

答案 2 :(得分:0)

你必须明白这一点: 对于数组: -

a[i] = *(a+i) // correct

所以

*a[i] = **(a+i) //pointer to pointer so it will not work in your case