我有以下代码:
int *p;
p = (int*)malloc(sizeof(int) * 10);
但是这个包含 10 个元素的 int 数组的默认值是多少?他们都是0吗?
真正的内容是不确定的。
C11, § 7.22.3.4
malloc
功能该
malloc
函数为大小由 size 指定且值为 indeterminate的对象分配空间。
但是,操作系统经常将此内存空间初始化为 0(请参阅此答案)。您可以使用而不是calloc
确保每个位都设置为 0。
are all of them 0?
不,malloc
不初始化分配的内存,用于calloc
将所有值初始化为0
int *p;
p = calloc(10, sizeof(int));
它是未定义的。而是使用calloc( )
分配的缓冲区定义为用二进制 0 填充
使用 malloc 创建的元素的“默认”值是此时存储在内存中的值(通常为 0,但如果另一个程序在此位置写入,您可以有其他值)。你可以使用 calloc,或者在 malloc 之后,你可以 memset 你的 var。并且不要忘记验证指针的值,检查它是否不为 NULL。
为此,您需要使用calloc() 。malloc() 仅分配内存,因此该内存默认包含垃圾值。