将 void 指针类型转换为内存分配不足的 int
Type casting a void pointer to an int with insufficient memory allocation
我正在用 1 个字节的内存初始化一个 void 指针,并将其类型转换为一个 int 指针并取消引用它,给它一个值 3(需要 4 个字节),但它 运行 没问题。这不应该导致错误或导致像 OOM 这样的运行时异常吗?
void* record = malloc(1);
int i=3;
*((int*)record) = 3;
当您像您在此处所做的那样写入超过由 malloc
分配的内存块的末尾时,您将调用 undefined behavior.
未定义的行为意味着无法预测程序的行为。它可能会崩溃,可能会输出奇怪的结果,或者看起来工作正常。此外,看似无关的更改(例如添加未使用的局部变量或调用 printf
进行调试)可能会改变未定义行为的表现方式。
总而言之,对于未定义的行为,仅仅因为程序 可能 崩溃并不意味着它 将 。
我正在用 1 个字节的内存初始化一个 void 指针,并将其类型转换为一个 int 指针并取消引用它,给它一个值 3(需要 4 个字节),但它 运行 没问题。这不应该导致错误或导致像 OOM 这样的运行时异常吗?
void* record = malloc(1);
int i=3;
*((int*)record) = 3;
当您像您在此处所做的那样写入超过由 malloc
分配的内存块的末尾时,您将调用 undefined behavior.
未定义的行为意味着无法预测程序的行为。它可能会崩溃,可能会输出奇怪的结果,或者看起来工作正常。此外,看似无关的更改(例如添加未使用的局部变量或调用 printf
进行调试)可能会改变未定义行为的表现方式。
总而言之,对于未定义的行为,仅仅因为程序 可能 崩溃并不意味着它 将 。