我正在初始化一个带有1个字节内存的void指针,并将其强制转换为int指针,并取消引用它,给它一个值3(需要4个字节),但运行正常。这不应该导致错误或导致像OOM这样的运行时异常吗?
void* record = malloc(1);
int i=3;
*((int*)record) = 3;
答案 0 :(得分:5)
如果您在此处完成了malloc
分配的内存块的结尾,则调用undefined behavior。
未定义的行为意味着无法预测程序的行为。它可能崩溃,它可能会输出奇怪的结果,或者它似乎可以正常工作。此外,一个看似无关的更改,例如添加未使用的局部变量或调用printf
进行调试,可能会改变未定义行为的显示方式。
总结一下,对于未定义的行为,仅仅因为程序 崩溃并不意味着将。