数组指针永无段错误?

时间:2018-11-03 09:47:01

标签: c++ c pointers malloc

我有一些我不懂的东西。

这是我的工作:

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

然后我尝试做

test[100] = 1.0;
printf("%f\n",test[100]);

然后...奏效了...

我正在等待细分错误,但是没有,我也不明白为什么。 我想要执行此操作以验证是否已正确分配阵列。 我真的没想到这一点,也许我错过了一些东西,所以我在互联网上搜索了一下,似乎每个人都遇到了段错误... 所以我来这里问。 谢谢

1 个答案:

答案 0 :(得分:1)

您造成的是不确定的行为-在这种情况下,它可以按预期运行,但是以任何方式依赖它是一个可怕的主意:编译器优化或更改操作系统可能突然导致“怪异”行为。您应该阅读有关此主题的更多信息,尽管简而言之,它具有未定义的行为,允许编译器执行所需的任何操作。

我没有足够的知识确定,但是我假设您的操作系统为您的程序准备了整个内存页。在Linux中,默认值为4 KiB,您访问的字节数最多为400,因此仍然有足够的空间。因此,由于操作系统使用不小于4 KiB的内存块,因此您可能正在访问为程序分配的内存。