c中malloc之后的默认值是多少?

我有以下代码:

int *p; p = (int*)malloc(sizeof(int) * 10); 

但是这个带有10个元素的int数组的默认值是多少? 他们都是0?

真实的内容是不确定的。

C11,§7.22.3.4malloc函数

malloc函数为一个对象分配空间,该对象的大小由size指定,其值是不确定的

但是,操作系统通常会将此内存空间初始化为0(请参阅此答案 )。 您可以使用相当的calloc来确保每个位都设置为0。

 are all of them 0? 

不, malloc没有初始化分配的内存,使用calloc将所有值初始化为0

 int *p; p = calloc(10, sizeof(int)); 

这是未定义的。 使用calloc( )代替,然后将分配的缓冲区定义为用二进制0填充

为此,您需要使用calloc() 。 malloc()仅分配内存,因此默认情况下此内存包含垃圾值。

使用malloc创建的元素的“默认”值是存储在此内存中的值(通常为0,但如果另一个程序在此处写入,则可以使用其他值)。 你可以使用calloc,或者在malloc之后,你可以memset你的var。 并且不要忘记validation指针的值,检查它是否为NULL。