#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位
答案 0 :(得分:2)
当我尝试arr [1]不是它应该通过错误
不得,但可能。这就是C中未定义行为的美妙,没有人知道会发生什么。
答案 1 :(得分:0)
您的程序会导致未定义的行为,因此可能会发生任何,包括正确行为的出现。你只是覆盖你请求的内存的末尾。之后,所有赌注都已关闭。您可能没有覆盖任何内容,或者可能是一些malloc
簿记数据,或者谁知道什么。只是不要这样做。