Return 包含使用指针的前 n 个斐波那契数的数组
Return an array containing the first n Fibonacci numbers using pointers
在指针和内存分配方面,我仍然是初学者,我正在尝试创建一个函数,returns 使用指针的斐波那契数列的前 n 个数字。当我尝试使用此代码时,它是 returns 个随机数,但我不知道如何修复它。这是代码:
int* generateFibonacci(int n)
{
// make an array for n ints
int *result = malloc(n * sizeof(int));
if (result == NULL)
{
// fail
printf("I have no memory, sorry. Exiting");
exit(1);
}
result[0] = 0;
result[1] = 1;
for (int i = 0; i < n; i++)
{
result[i + 2] = result[i - 1] + result[i - 2];
}
return result;
}
如果有人能指出正确的方向,那就太好了,谢谢!
您正在 for
循环中越界访问数组
for (int i = 0; i < n; i++)
{
result[i + 2] = result[i - 1] + result[i - 2];
}
对于i = 0
,i -1
和i -2
是越界访问。同样,对于 = n-2
,i+2
正在访问 result[n]
,这也是越界访问(数组索引从 0 到 n-1)。
您可以通过
解决此问题
for (int i = 2; i < n; i++){
result[i] = result[i - 2] + result[i - 1];
}
在指针和内存分配方面,我仍然是初学者,我正在尝试创建一个函数,returns 使用指针的斐波那契数列的前 n 个数字。当我尝试使用此代码时,它是 returns 个随机数,但我不知道如何修复它。这是代码:
int* generateFibonacci(int n)
{
// make an array for n ints
int *result = malloc(n * sizeof(int));
if (result == NULL)
{
// fail
printf("I have no memory, sorry. Exiting");
exit(1);
}
result[0] = 0;
result[1] = 1;
for (int i = 0; i < n; i++)
{
result[i + 2] = result[i - 1] + result[i - 2];
}
return result;
}
如果有人能指出正确的方向,那就太好了,谢谢!
您正在 for
循环中越界访问数组
for (int i = 0; i < n; i++)
{
result[i + 2] = result[i - 1] + result[i - 2];
}
对于i = 0
,i -1
和i -2
是越界访问。同样,对于 = n-2
,i+2
正在访问 result[n]
,这也是越界访问(数组索引从 0 到 n-1)。
您可以通过
for (int i = 2; i < n; i++){
result[i] = result[i - 2] + result[i - 1];
}