malloc(sizeof(x)) 是否使用 x 初始化分配的内存?

Does malloc(sizeof(x)) initialise the allocated memory with x?

提问人: 提问时间:6/14/2022 最后编辑:Vlad from Moscow 更新时间:6/14/2022 访问量:133

问:

是否自动与 ?tmp = malloc(sizeof(x));tmp = malloc(sizeof(x)); *tmp = x;

更具体地说,malloc 是立即初始化我的变量,还是只是分配内存而我必须自己初始化它?

c malloc 大小

评论

2赞 Thomas Jager 6/14/2022
事实并非如此。那里没有任何东西可以做到这一点。另外,可能是错的,你的意思是.tmp = x*tmp = x
0赞 chux - Reinstate Monica 6/14/2022
@Petra Enis,什么是?x
0赞 chux - Reinstate Monica 6/14/2022
ptr = malloc(sizeof ptr[0] * n);
0赞 Ted Lyngmo 6/14/2022
不过,如果您愿意,您可以将其零初始化。查看 calloc

答:

4赞 ikegami 6/14/2022 #1

不。

malloc 返回的内存未初始化。

引用 cppreference

为未初始化的存储分配大小的字节数。

4赞 ShadowRanger 6/14/2022 #2

不。即使未定义为未初始化的存储,也与 的运行时值无关(这只是查找变量基础类型大小的友好方法)。在您提供的代码中,运行时根本没有使用 的值。mallocsizeof(x)xx

0赞 JakobS. 6/14/2022 #3

不,该函数只是在堆上分配内存。它不会初始化指针。malloc()

评论

2赞 Ted Lyngmo 6/14/2022
“On the heap”听起来像是一个实现细节,可能会有所不同,尽管在大多数情况下可能是正确的。
2赞 Vlad from Moscow 6/14/2022 #4

运算符生成其操作数的大小(以字节为单位)。sizeof

也就是说,例如,如果标识符表示该类型的变量的名称,则表达式将生成该值,前提是编译器为该类型的对象保留字节。xintsizeof( x )4int4

所以这个电话

tmp = malloc(sizeof(x));

将等同于调用

tmp = malloc(sizeof(int));

这反过来又相当于

tmp = malloc( 4 );

此语句只是尝试动态分配字节。分配的内存未初始化。4

此外,表达式 sizeof( x ) if 不是可变长度数组,在程序开始执行之前在编译时计算。x

您可以通过以下方式用零初始化它

tmp = calloc( 1, sizeof( x ) );