动态内存的初始值是多少

What is the initial value of dynamic memory

当我使用 malloc 系列的函数在 C 中动态分配内存时,是否有一些规则(来自 C 标准或 OS 的内部工作原理)关于初始值是多少那段记忆的价值是?

int* ptr = malloc(sizeof (*ptr));
bool b = *ptr == 0;  // always true?

就C 标准而言,动态分配内存的初始值是不确定的。有些平台可能碰巧给你零,其他平台可能碰巧给你像 0xEE 这样的保护值,但是 none 在可移植的 C 程序中可以依赖它。

如果你需要零,最常规的方法是使用calloc(),它有机会在某些平台上进行优化。