键入一个指向int的void指针,内存分配不足

Har*_*lli -1 c pointers void-pointers

我正在初始化一个带有1个字节内存的void指针,并将其类型转换为int指针,并取消引用它,给它一个值3(需要4个字节),但运行正常.这不应该导致错误或导致像OOM这样的运行时异常吗?

void* record = malloc(1);
int i=3;
*((int*)record) = 3;
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 5

当你在这里写完malloc你所分配的内存块的末尾时,你会调用未定义的行为.

未定义的行为意味着无法预测程序的行为.它可能崩溃,它可能会输出奇怪的结果,或者它似乎可以正常工作.此外,一个看似无关的变化,如添加一个未使用的局部变量或调用printf调试,可以改变未定义的行为表现自己的方式.

总而言之,对于未定义的行为,仅仅因为程序可能崩溃并不意味着它.