gpt4 book ai didi

arrays - 在数组中查找最大数时出现奇怪的行为

转载 作者:行者123 更新时间:2023-12-04 08:15:17 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does the indexing start with zero in 'C'?

(16 个回答)


8 个月前关闭。




尝试集思广益时发现了一些非常奇怪的行为:
代码用途:
查找数组中最大数的简单代码。我只是将第一个索引存储到一个变量中,并将它与列表中的所有其他索引进行比较。如果另一个数字更大,则该数字将替换存储在我的变量中的数字,并重复该过程直到列表末尾。

#include <stdio.h>

const int SIZE = 8;

int main(void)
{
int arr[] = {7, 3, 9, 14, 1, 27, 14, 2};
int largest;

largest = arr[0];

for (int i = 1; i <= SIZE; i++)
{
if (largest < arr[i])
{
largest = arr[i];
}
}

printf("The largest number in the array is %i\n", largest);
}
奇怪的行为:
这有时有效。其他时候,我会得到大量的数字,让我觉得我已经击中了一个我不应该拥有的内存区域。我可以理解是否每次都发生这种情况,但是因为它只发生在每 2 次或 3 次我编译代码时,我感到很困惑。代码不会改变,但输出会
控制台日志:
~/pset3/plurality/ $ ./test
The largest number in the array is 1366797536
~/pset3/plurality/ $ ./test
The largest number in the array is 27
~/pset3/plurality/ $ ./test
The largest number in the array is 27
~/pset3/plurality/ $ ./test
The largest number in the array is 1773422672
~/pset3/plurality/ $
我的想法:
循环以某种方式命中超过数组的末尾并将其视为最大的数字。再次奇怪的是,这只发生在 50% 的时间
任何想法将不胜感激。

最佳答案

您的循环执行次数过多。循环终止条件 i <= SIZE将导致循环体访问 arr[SIZE] ,它在 arr 之外数组——记住 C 数组索引从 0 开始。
由于数组存储在堆栈帧中,您的代码将从位于数组外第一个地址的堆栈中获取一些垃圾值。这个垃圾值可以是任何东西,也可以是一个很大的正值,导致你所看到的。

关于arrays - 在数组中查找最大数时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65734767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com