以下は、未定義の動作を理解するためのプログラムです。私は 10 *4 = 40 バイトのメモリで ptr を割り当てており、アクセスしようとしています。そのため、40 バイトを超えている *(ptr+0x100) が完了すると、セグ フォールトが発生する必要があります。コードから観察されるのは、*(ptr+0xc000) で seg fault が発生することです。ヒープのサイズを超えるとセグフォルトになるということですか?ptr が割り当てられた 40 バイトの境界外にある ptr+100 にアクセスしようとしたときに、セグ フォールトが発生しないのはなぜですか。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main()
{
int * ptr = malloc(10 * sizeof(int) );
*ptr = 0x100;
printf(" Done 1\n");
*(ptr+0x9) = 0x90;
printf(" Done 2\n");
*(ptr+0x100) = 0x400;
printf(" Done 3\n");
*(ptr + 0x1000) = 0x4000;
printf(" Done 4\n");
*(ptr + 0x4000) = 0x4000;
printf(" Done 5\n");
*(ptr + 0x8000) = 0x8000;
printf(" Done 6\n");
*(ptr + 0xc000) = 0xc000;
printf(" Done 7\n");
}