这是我的代码
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
int main()
{
void *p=malloc(1);
int *x=(int*)(p);
*(x+1000)=1000;
printf("*(x+1000)=%d\n",*(x+1000));
//*(x-100)=-100;
//Segmentation fault
return 0;
}
输出
*(x+1000)=1000
但是我没有分配内存4000(1000 * sizeof(int))大小的内存,只有1。
当我使用*(x-100)=-100
时,shell将输出Segmentation fault
,这似乎是有道理的。
答案 0 :(得分:4)
C语言中没有任何内容阻止您在变量或已分配内存的范围之外进行读写操作。
您动态分配1个字节的内存,然后尝试在其后写入1000 * sizeof(int)个字节的内存位置。这样做会调用undefined behavior。