malloc分配的内存是否有边界?

时间:2017-04-21 03:45:18

标签: c malloc

这是我的代码

#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,这似乎是有道理的。

你能告诉我为什么吗? 由于
我使用ubuntu 16.04.4和gcc 5.4.0

1 个答案:

答案 0 :(得分:4)

C语言中没有任何内容阻止您在变量或已分配内存的范围之外进行读写操作。

您动态分配1个字节的内存,然后尝试在其后写入1000 * sizeof(int)个字节的内存位置。这样做会调用undefined behavior