【发布时间】:2023-03-29 06:15:01
【问题描述】:
当我在 C 中使用 malloc 系列的函数动态分配内存时,是否有一些规则(来自 C 标准或操作系统的内部工作原理)关于该内存的初始值是多少?
int* ptr = malloc(sizeof (*ptr));
bool b = *ptr == 0; // always true?
【问题讨论】:
-
不。
calloc?是的。 -
取决于。不会依赖它。您可以随时使用
calloc。 stackoverflow.com/questions/1538420/… -
@MikeCAT:据我所知,在没有初始化的情况下使用
malloc()的结果只是在使用“陷阱表示”的系统上的未定义行为,当涉及的类型是整数时,就像在这里的问题,基本上不会发生在任何实际系统中。因此,虽然它在某些假设的计算机上在技术上可能是未定义的行为,但我认为这个问题的代码中没有任何真正的 UB 风险。它仍然是无用的代码。 -
对于这一行:
bool b = *ptr == 0;中的结果值b将取决于两个运算符=和==在 C 中的precedence优先级每:http://www.swansontec.com/sopc.html,赋值运算符=的优先级低于二元运算符==,因此它取决于*ptr的内存中发生了什么由于该指针具有int*类型,(假设是32 位架构)*ptr为 0 的几率是 1:4gig。所以b中的结果很可能是假的,但是,b中的结果有四分之一的机会是真的
标签: c heap-memory dynamic-memory-allocation