gpt4 book ai didi

c - 这段代码发生了什么?为什么我可以迭代到 335?

转载 作者:行者123 更新时间:2023-11-30 18:25:36 25 4
gpt4 key购买 nike

#include <stdlib.h>
#include <stdio.h>

int main(void){
int array[] = {0, 1, 2, 3, 4};

for(int i = 0; i < 1000000; i++)
printf("%p %d %d", &array[i], array[i], i);

return 0;
}

哪个输出:

0x7fff5b0b0ac0 0 0
....... blahblah
0x7fff5b0b0fe4 0 329
0x7fff5b0b0fe8 0 330
0x7fff5b0b0fec 0 331
0x7fff5b0b0ff0 0 332
0x7fff5b0b0ff4 0 333
0x7fff5b0b0ff8 0 334
0x7fff5b0b0ffc 0 335
Segmentation fault: 11

我尝试编译,但它总是停止在 335 这里发生了什么?它与我的硬件有关吗? (Macbook Air“13)?请解释一下,我是外行。

谢谢

最佳答案

越界访问数组会导致未定义的行为。因此,访问 array[5] 可能已经创建了段错误 - 它是未定义的。在您的情况下,访问 array[335] 会导致内存违规,这只是随机的。在不同的机器上尝试一下,它的行为可能会有所不同。

behaviour, such as might arise upon use of an erroneous program construct or erroneous data, for which this International Standard imposes no requirements 3.

关于c - 这段代码发生了什么?为什么我可以迭代到 335?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794585/

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