C malloc with 2D Array:为什么没有分段错误?

1 c malloc

我使用这种方法在2d数组上做malloc,我的来源是 http://c-faq.com/aryptr/dynmuldimary.html修改2D数组的malloc策略,所以malloc成功:

int
main(int argc, char *argv[])
{
    long **array = NULL;

    array = malloc(5 * sizeof(long *));
    for (int i = 0; i < 5; i++)
        array[i] = malloc(3 * sizeof(long));

    array[4][2] = 515;
    array[4][3] = 212;
    array[4][10000] = 3;

    printf("%ld\n", array[4][10000]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么在返回之前的最后三行中的任何一行中都没有出现分段错误?它是否安全(忽略了自由的存在)?

Set*_*gie 6

您正在调用未定义的行为.顾名思义,未定义的行为未定义为导致分段错误.该代码可以将该内存的值设置为您提供的值,它可以完全忽略该分配,或者它可以为我们所知道的所有人订购披萨.