gpt4 book ai didi

c - 动态分配数组的新手。为什么我这里有段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:40 24 4
gpt4 key购买 nike

我对斐波那契使用嵌套数据结构,但出现段错误 11。

void fib(int **fib_array, int n){

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

for(int i = 0; i < n; i++){
fib_array[i] = malloc(sizeof(int));
}

for(int i = 0; i < n; i++){
if (i <= 1){
fib_array[i][0] = i;
}

else{
fib_array[i][0] = fib_array[i - 2][0] + fib_array[i - 1][0];
}
}
}


int main(int argc, char **argv) {
/* do not change this main function */
int count = strtol(argv[1], NULL, 10);
int *fib_sequence;

fib(&fib_sequence, count);
for (int i = 0; i < count; i++) {
printf("%d ", fib_sequence[i]);
}
free(fib_sequence);
return 0;
}

最佳答案

你太复杂了。你只需要一个 malloc

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

并从所有地方删除第二个索引 [0]

混淆来自**int。这看起来像一个多维数组。它不是 - 它已声明 ** 以便您可以在调用方中设置值。一个更简单的例子会有所帮助

void Make42(int* v)
{
*v = 42;
}

int main()
{
int myv = 0;
Make42(&myv);
// now myv == 42
}

arg 列表中的 * 使 Make42 可以“伸出手”并修改传递给它的内容(在本例中为 myv)

在您的代码中,fib 数组上的 ** 也是出于同样的目的。你本来可以做的(知道测试定义不允许你这样做)

    int *fib(int n){
int *fib_array = malloc(n * sizeof(int));
......
return fib_array;
}

主要是

fib_sequence = fib(count);

这使您更清楚地知道您实际上是在操作一个简单的数组

关于c - 动态分配数组的新手。为什么我这里有段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448269/

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