在C语言中使用malloc分配内存时,默认值是什么?

5

I have the following code:

int *p;

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

但是这个有10个元素的int数组的默认值是什么?它们都是0吗?


3
为什么不阅读手册页 - http://linux.die.net/man/3/malloc - Ed Heal
描述malloc() 函数分配 size 字节的内存,并返回指向已分配内存的指针。该内存未被初始化。 - Ed Heal
1
不要在C语言中强制转换malloc()的返回值。 - unwind
5个回答

14

真正的内容是不确定的。

C11,§7.22.3.4 malloc函数

malloc函数分配一个大小由 size 指定、值为不确定的对象的空间。

然而,操作系统通常将此内存空间初始化为0(请参见此答案)。您可以使用calloc来确保每个位都被设置为0。


5
are all of them 0?

不,malloc 不会初始化分配的内存,使用 calloc 可以将所有值初始化为 0
int *p;
p = calloc(10, sizeof(int));

2

这是未定义的行为。建议使用 calloc( ) 代替,这样分配的缓冲区会被定义为填充二进制0。


1
使用malloc创建的元素的“默认”值是存储在内存中的值(通常为0,但如果另一个程序在此位置写入,则可能有其他值)。 您可以使用calloc,或在malloc之后,您可以使用memset来设置变量。 并且不要忘记验证指针的值,检查它是否不为NULL。

0
你需要使用calloc()来实现这个目的。malloc()只会分配内存,所以这块内存默认包含了垃圾值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接