-2
#include <stdio.h>
#include <string.h>

int main()
{
   int *arr = NULL;
   arr = (int *) malloc(1*sizeof(int));
   arr[0] = 4;
   arr[1] = 2;
   printf("%d%d\n", arr[0], arr[1]);
   system("PAUSE");
   return 0;
}

为什么返回 42?大小不是malloc只能使一个整数可用于
存储吗?(当我尝试 arr[1] 时不应该抛出错误吗?)

我用的是Win7 32位

4

2 回答 2

2

当我尝试 arr[1] 时,它不应该通过错误吗

它不必但它可能。这就是 C 中未定义行为的美妙之处,不知道会发生什么。

于 2013-09-23T22:14:46.657 回答
0

您的程序会导致未定义的行为,因此任何事情都可能发生,包括正确行为的出现。您只是覆盖了您请求的内存的末尾。在那之后,所有的赌注都被取消了。您可能没有覆盖任何内容,或者可能是一些malloc簿记数据,或者谁知道。只是不要那样做。

于 2013-09-23T22:14:31.503 回答