动态阵列混乱

Abd*_*lah 4 c malloc dynamic-arrays

我只是在梳理我的C概念,我对某些行为感到困惑.请考虑以下代码段:

#include<stdio.h>
#include<stdlib.h>

int main (){


    int * arr;
    arr= malloc(3*sizeof(*arr));
    arr[0]=1;
    arr[1]=2;
    arr[2]=3;
    arr[3]=4;
    printf("value is %d \n", arr[3]);

return 0;


}
Run Code Online (Sandbox Code Playgroud)

问题是程序运行正常!据我所知,我为3个整数的数组分配内存.所以基本上当我尝试放入一个值时arr[3] ,应该有一个segmentation fault没有分配给它的内存.但它工作正常并打印出值4.要么这是一些奇怪的行为,要么我真的需要修改基本的C.如果有人能提供一些解释我会非常感激.谢谢.

Alo*_*ave 10

从技术上讲,它是未定义的行为,这意味着任何事情都不一定是分段错误.
只是你的程序不是一个有效的程序,你不应该编写无效的程序,并期望从他们的有效/无效行为.


Lev*_*von 6

您可以随时获得分段错误,这次您"幸运".这是未定义的行为,因此您可能会在其他时间遇到seg错误.

C 没有做任何边界检查,所以虽然Java会抱怨,但C很乐意做你要求它做的任何事情,甚至对程序本身的不利.

这既是它的主要优势之一,也是弱点.