mallocによる確保外の領域への参照
構造体をmallocにより動的確保を行っていたのですが、例えば
typedef struct _point{
int x, y;
} point;
point *pelem_point;
pelem_point = (point *)malloc(sizeof(point)*5);
このように、point型の構造体を5つ確保するとします。
しかし、
(pelem_point+100)->x = 1;
(pelem_point+100)->y = 2;
printf("%d\n", (pelem_point+100)->x);
printf("%d\n", (pelem_point+100)->y);
とやったら、確保していない100個先のところも構造体として利用できました。
なぜなのでしょうか。
自分の考えではこのようになりました。
mallocによりヒープ領域から適当な空いているメモリのアドレスが渡されるため、そこからはヒープ領域より先に、限りがあるまで進めてしまうために確保外のサイズにアクセスしても使えてしまっている。
また、mallocにより確保した場合は使用中のラベルがはられるため他に侵されることはないが、先の例のようにmallocによって確保してない場合はいくら使用できたとしても、空いているとコンピュータでは認識されるため、何かヒープ領域を使う場合に勝手に上書きされてしまう可能性がある。
しかし、この考えでも、なぜ確保外の領域が構造体のサイズ分ずつ区切られているのか納得いきません。
わかる方いましたらよろしくお願いします。