c - 分配期间从数组位置获取错误的数据值

标签 c arrays loops for-loop fibonacci

我正在做一个编程练习,我必须使用循环(非递归)来实现斐波那契数列。

虽然它无论如何都不完美,但我遇到的主要问题是我的算法。

由于变量 intBuffer 被分配了一个指针,因此在将其分配给内存位置 intArray[0 之前,它会随着 intArray[1] 的值变化而变化,而不是保留以前的值]

我尝试使用 * 前缀来获取数据值而不是内存位置,但这产生了错误:

error: invalid type argument of unary '*' (have 'int')

代码如下:

#include <stdio.h>
int main(void)
{
    int intArray[1];
    int intRounds, intIndex, intBuffer;
    printf("How many iterations would you like me to calculate? \n");
    scanf("%d", &intRounds);

    intArray[1] = 1;
    intArray[0] = 0;

    for (intIndex = 0; intIndex <= (intRounds - 1); intIndex++)
    {
        intBuffer = intArray[1];
        intArray[1] = intArray[1] + intArray[0];
        intArray[0] = intBuffer;
        printf("Iteration %d: %d \n", (intIndex + 1), intArray[1]);
    }   

    return 0;
}

最佳答案

您的代码表现出未定义的行为,因为您将 intArray 定义为只有一个元素,然后您尝试通过

访问第二个元素
 intArray[1] = 1;

C 对数组使用基于 0 的索引,因此对于单元素数组,索引 1 是超出分配内存的访问,并将调用 undefined behaviour .

也就是说,就逻辑而言,在 for 循环内,您不断地覆盖 intArray[i] 处的值。

你应该

  1. 定义一个足够大的数组以容纳系列长度的所有值。您可以使用指针和 malloc()用于动态内存分配,或 VLA (如果支持)。
  2. 使用循环计数器 intIndex 为每次迭代中的目标元素建立索引。

关于c - 分配期间从数组位置获取错误的数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921803/

相关文章:

C++ 主文件不显示所有内容

Python 错误 : List Object Not Callable with For Loop

c - GDB:如何解释 x86_64 调用堆栈和寄存器(特别是 $rbp)

c - 在 Mac OS X 中打开文件

c - 如何在C中运行shell命令

c - 定义类型的顺序

javascript - 是否有任何高阶函数可以从 javascript 中的对象数组返回对象?

c - 如何在C中将数组插入数组

javascript - 使用元素之一作为引用点从 Javascript 数组中选择元素

swift - 反向 For 循环;应该很容易