-2

別のプロジェクトで奇妙なことが起こっていることに気付いた後、次のように書きました。このコードは、配列が範囲外で複数回呼び出されている場合でも、セグメンテーション違反を生成しません。以下のコードを実行してもセグメンテーション違反が発生しない理由を誰かが説明してくれますか?

#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]);
    }   
}
4

4 に答える 4