別のプロジェクトで奇妙なことが起こっていることに気付いた後、次のように書きました。このコードは、配列が範囲外で複数回呼び出されている場合でも、セグメンテーション違反を生成しません。以下のコードを実行してもセグメンテーション違反が発生しない理由を誰かが説明してくれますか?
#include <stdlib.h>
#include <stdio.h>
int main()
{
int *a = (int *)malloc(4 * sizeof(int));
int *b = (int *)malloc(3 * sizeof(int));
int i = 0;
for(i =0; i <3 ; i++)
{
b[i] = 3+i;
}
for(i = 0; i < 4; i++)
{
a[i] = i;
}
for(i = 0; i < 100 ; i++){
a[i] = -1;
}
for(i = 0 ; i < 100 ; i++){
printf("%d \n", b[i]);
}
}