我想使用c('a','w','r','t')
在堆中创建动态数组。
malloc
问题在于不初始化为零,我希望尽可能避免使用int *c = malloc(5 * sizeof(int));
,因为我不知道它有多安全。
如果我使用calloc
,是否会执行相同的calloc
工作?
答案 0 :(得分:2)
你可以使用calloc()
,这是安全的,或者为什么它会在标准库中实现?如何?对于大型分配,它可能比malloc()
+ memset()
更有效。
答案 1 :(得分:1)
<强>的malloc():强>
malloc()
需要一个争论:要分配的字节数。分配的字节是未初始化。因此,它们的值可以是0-255之间的任何值,或者这些数字的任意组合。 不要指望任何事情!
代码示例:
int *mem = malloc(5 * sizeof(int));
<小时/> 的释放calloc():强>
calloc()
有两个争论:为每个元素分配内存的元素数量以及需要为每个元素分配的内存量。 将每个字节初始化为零。
代码示例:
int *mem = calloc(5, sizeof(int));
来自 C编程语言 ~Brian W. Kernighan和Dennis M. Ritchie:
void * calloc(size_t nobj,size_t size)
calloc返回指向nobj对象数组的空间指针,
每个尺寸大小,如果不能满足请求,则为NULL 空格初始化为零字节。
[强调我的]
或者,您可以使用memset()
#include <string.h> // for memset()
//allocate memory
int *mem = malloc(5 * sizeof(int));
//initialize memory to zeros
memset(mem, 0, 5 * sizeof(int));
答案 2 :(得分:0)
如果您因某些原因想避免使用calloc,可以使用memset。你可以这样做:
memset (c, 0, 5 * sizeof(int));
不要忘记检查malloc的返回值。