3

我有以下代码:

int *p;

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

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

4

5 回答 5

13

真正的内容是不确定的。

C11, § 7.22.3.4malloc功能

malloc函数为大小由 size 指定且值为 indeterminate的对象分配空间。

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

于 2013-07-03T09:38:45.940 回答
5
are all of them 0?

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

int *p;
p = calloc(10, sizeof(int));
于 2013-07-03T09:39:22.573 回答
2

它是未定义的。而是使用calloc( )分配的缓冲区定义为用二进制 0 填充

于 2013-07-03T09:38:37.100 回答
1

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

于 2013-07-03T09:42:05.287 回答
0

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

于 2013-07-03T09:38:13.650 回答