gpt4 book ai didi

C 斐波那契数列数组段错误

转载 作者:行者123 更新时间:2023-11-30 19:36:02 25 4
gpt4 key购买 nike

我想填充一个数组,最多可容纳 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 中我遇到了段错误,我不确定它来自哪里。

如有任何帮助,我们将不胜感激。

最佳答案

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

(1)替换

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];
}

}
}

关于C 斐波那契数列数组段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com