2017-04-21 87 views
-1

這裏是我的代碼是否通過的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

未定義的行爲未定義。 – John3136

回答

4

沒有什麼在阻止你閱讀或變量或分配的內存邊界之外寫入C語言。

您動態分配1個字節的內存,然後嘗試寫入內存位置1000 * sizeof(int)個字節之後。這樣做調用undefined behavior