数组,分配,困惑

Qos*_*smo 0 c arrays

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

int main()
{
    int *numeros = malloc(sizeof(int) * 3 * 3);
    numeros[900] = 10;
    printf("%d", numeros[900]);
    free(numeros);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我没有分配足够的内存时,为什么这个打印出10?我很确定我在指针等方面缺少一些重要的东西.

谢谢你的帮助

sha*_*oth 14

你观察到的是未定义的行为 - 你在分配的缓冲区之外写,并可能覆盖一些恰好映射到进程中的内存.

根据各种因素,这可能会导致程序崩溃,或者只是不执行任何操作或损坏程序中的数据.不要这样做,只访问你合法分配的内存.

另请参阅此相关问题.