我的数组显示 50 个元素,然后我得到随机内存大小,这是为什么?

My array displays 50 elements then i get random memory sizes, why is that?

如果我尝试输入系列中的第 50 个数字,它会显示到第 46 个,然后生成随机数,但是当我计算两个中的字符时,我发现它们都等于 10,那么为什么它恰好停在46?

我的代码:

void calculating_f(int val){
    int aray[100] = {0,1};
    int i;

    printf("%i %i ", aray[0], aray[1]);
    for (i=2; i < val; i++){
      aray[i] = aray[i - 2] + aray[i - 1];
      printf("%i ", aray[i]);
    }
}

整数溢出(假设 int 在您的系统上是 32 位)。第 46 个斐波那契数是最大的,适合带符号的 32 位值。

顺便说一句——你真的不需要数组。

[修正后回答]
感谢@mch 指出我在使用 'unsigned int data type' 的回答中的错误。

请使用 'unsigned long long int (64bit data type)' 和 '%llu' 格式说明符进行 printf() 调用。

[修正前回答]
aray 按照定义存储 int 数据。

当您给定 limit val = 50 时,当 i = 47 时,计算出的值超过了有符号整数数据类型的最大值。

您应该将数据类型更改为 'unsigned int' 并在 printf() 调用的格式说明符中使用“%u”。

因为你使用的是 int,c 中的 int 可以保存从 –2,147,483,648 到 2,147,483,647 的数字,但是第 47 个斐波那契数是 2971215073,它超出了这个范围导致 overflow.you 可以尝试使用 long long这将使您达到第 92 个斐波那契数。

p.s 如果您只想获得第 n 个斐波那契数,则不需要数组。如果您需要计算第 n 个斐波那契数,请查看矩阵求幂,如果您只需要第 n 个斐波那契数

,它比您正在做的要快得多