2017-04-21 9 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を出力します。これは意味をなさないと思われます。

理由を教えてもらえますか?
おかげで、私はUbuntuの16.04.4とgcc 5.4.0

+1

未定義の動作は未定義です。 – John3136

答えて

4

何も変数または割り当てられたメモリの境界外の読み取りや書き込みをできないようにC言語ではありません使用

動的に1バイトのメモリを割り当てた後、メモリ位置に1000 * sizeof(int)バイト後に書き込みを試みます。これにより、undefined behaviorが呼び出されます。

関連する問題