-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
未定義の動作は未定義です。 – John3136