有人可以告诉我为什么会出现此细分错误吗? 是否因为我将指针设置为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]);
}
}
我希望得到一个很好的解释答案。
答案 0 :(得分:3)
有问题的陈述是:
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。
答案 1 :(得分:0)
您尝试访问Matrix
指针的索引。
null
如果您想要参考,我已修复您的代码。
int* ComputeFibo(int _size)
{
int* arr = NULL;
arr[indx] = 1; //SIGF
...
}
输出:
#include <stdlib.h>
#include <stdio.h>
void compute_fibo(int *_arr, int _size);
void print_fibo(int *_arr, int _size);
int main(int argc, char *argv[]) {
int n = 0;
printf("Please enter Fibonacci size:");
scanf("%d", &n);
int *arr = (int *) malloc(sizeof(int) * n);
if (arr == NULL) return 1;
compute_fibo(arr, n);
print_fibo(arr, n);
free(arr);
return 0;
}
void compute_fibo(int *_arr, int _size) {
_arr[0] = 1;
_arr[1] = 1;
for (int index = 2; index < _size; index++) {
_arr[index] = _arr[index - 1] + _arr[index - 2];
}
}
void print_fibo(int *_arr, int _size) {
for (int index = 0; index < _size; ++index) {
printf("%d\t", _arr[index]);
}
}