malloc()分配的数据不为零

use*_*758 2 c linux memory memory-management

我使用'malloc()'为C语言中的结构分配内存.部分结构如下:

struct f2fs_sb_info {
    struct f2fs_fsck *fsck;
    struct f2fs_super_block *raw_super;
    struct f2fs_nm_info *nm_info;
    struct f2fs_sm_info *sm_info;
    struct f2fs_checkpoint *ckpt;
};
Run Code Online (Sandbox Code Playgroud)

我发现的值raw_super始终为零,而价值ckpt是永远0x40000050.

我知道malloc()不会初始化分配的内存.所以分配的内存应该是随机值.但是每次运行程序时,值ckpt始终0x40000050并且不会改变.为什么?

小智 7

分配的内存可以在分配后存储任何值,但它不必是随机的 - 分配根本不是随机生成器.


Bat*_*eba 5

把它想象成一个有趣的特点.

未初始化的变量(例如,为结构分配内存后的结构元素)可以取任何值.据说这样的价值是不确定的.C标准不要求以任何方式初始化它们.请注意,读取此类变量(除了a之外unsigned char)的行为未定义,因为未初始化的值可能是陷阱表示.