2017-04-21 7 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을 사용할 때, 쉘은 Segmentation fault을 출력 할 것이고, 이는 의미있는 것처럼 보인다.

이유를 말해 줄 수 있습니까?
덕분에
나는 우분투 16.04.4 및 GCC 5.4.0

+1

정의되지 않은 동작은 정의되지 않았습니다. – John3136

답변

4

읽거나 변수 또는 할당 된 메모리의 경계 외부에서 작성에서 당신을 방지 C 언어 어디에도 없습니다 사용합니다.

동적으로 1 바이트의 메모리를 할당 한 다음 메모리 위치에 1000 * sizeof (int) 바이트 뒤에 쓰기를 시도합니다. 이렇게하면 undefined behavior이 호출됩니다.