有人能告诉我为什么会出现这个段错误吗?是因为我设置了一个指向 NULL 的指针并将它传递给一个函数吗?当我想发送一个数组给函数时,我应该使用数组还是指针?
#include <stdlib.h>
#include <stdio.h>
int* ComputeFibo(int _size);
void PrintFibo(int* _arr, int _size);
int main (int argc, char* argv[])
{
int* arr = NULL;
int n = 0;
printf("Please enter Fibonacci size:");
scanf("%d", &n);
arr = ComputeFibo(n);
PrintFibo(arr, n);
return 0;
}
int* ComputeFibo(int _size)
{
int sum = 0;
int indx = 0;
int* arr = NULL;
arr[indx] = 1;
for (indx = 1; indx < _size; ++indx)
{
arr[indx] = arr[indx - 1] + sum;
sum = arr[indx - 1];
}
return arr;
}
void PrintFibo(int* _arr, int _size)
{
int indx = 0;
for (; indx < _size; ++indx)
{
printf("%d\t", _arr[indx]);
}
}
我很想得到一个对此有很好解释的答案。
有问题的语句是:
int* arr = NULL;
其中 arr
指向 NULL,然后您将值分配给 arr
,就好像它指向有效的内存位置一样。
您可以通过以下方式修复它:
int* arr = malloc(_size * sizeof *arr);
if (arr == NULL) { /* error *}
然后在返回的指针上调用 free()
。
arr = ComputeFibo(n);
PrintFibo(arr, n);
free(arr);
另请注意,int
在 C 中只能表示有限的值。因此,例如,如果您尝试计算多达 100 个斐波那契数,您很可能会遇到 integer overflow。 .
我是一名优秀的程序员,十分优秀!