数组的指针从不分段故障

Pointer of array never seg fault?

本文关键字:分段 故障 指针 数组      更新时间:2023-10-16

我有些不明白的地方。

我是这样做的:

float* test = (float*) malloc(4 * sizeof(float) );

然后我试着做

test[100] = 1.0;
printf("%fn",test[100]);

而且。。。它奏效了。。。

我一直在等待一个分段错误,但没有,我不明白为什么。我想这样做是为了验证我的数组是否已正确分配。我真的没想到,也许我错过了什么,所以我在网上搜索,似乎每个人都有一个segfault。。。所以我来问。感谢

您造成的是未定义的行为-在这种情况下,它按预期工作,但以任何方式依赖它都是一个可怕的想法:编译器优化或更改操作系统可能会突然导致"奇怪"的行为。您应该阅读更多关于这个主题的内容,尽管简而言之,对于未定义的行为,编译器可以随心所欲。

我没有足够的知识来确定,但我假设你的操作系统为你的程序准备了一整页内存。在Linux中,默认情况下它是4 KiB,并且您访问的字节数高达400,所以仍然有足够的空间。因此,您可能正在访问为程序分配的内存,因为操作系统使用的内存块不小于4 KiB。