malloc和calloc

我知道这个问题可能被标记为malloc和calloc之间的差异的重复,但我仍然想问一下。

我知道calloc initilizes的内存块,在这里我的问题是没有专注于该部分。

我的问题是

malloc的定义表示它分配一个指定大小的内存块。

calloc表示它分配了多块内存,每块内存大小相同。

这一块内存的分配和多块内存的区别是两者之间的真正区别吗?

因为我觉得我们可以用malloc来做同样的事情,这可以通过calloc完成。

例如 :

int *ptr;
ptr=(int *) malloc(100 * (sizeof(int)));

int *ptr;
ptr=(int *) calloc(100,sizeof(int));

最终会分配100倍int所需的内存。


你的代码示例是正确的...由ptr指向的实际内存将是相同的大小(即100个int对象的堆上的数组)。 正如其他人所说的,调用calloc实际上会将内存清零,因为malloc只会给你一个指向该内存的指针,并且内存可能有或没有全部为零。 例如,如果你得到的是从另一个对象中回收的内存,那么对malloc的调用仍然具有它以前使用的值。 因此,如果您将内存视为“干净”,并且不要使用某些默认值对其进行初始化,则最终会导致程序中出现某种意外行为。


calloc用ZERO填充内存。

p=calloc(n, m); 

相当于

p=malloc(n*m); 
memset(p, 0, m * n);

因此,如果你打算把你的分配内存设置为零,那么使用malloc你必须计算n*m两次,或者使用一个temp变量,这就是calloc所做的事情。

编辑:我刚刚读过ISO C标准,发现无处不在指定calloc的实现应该检查n*m溢出,也就是说,如果它超过C99标准中的常量SIZE_MAX


那么calloc也会初始化内存块以包含与malloc不同的零。

链接地址: http://www.djcxy.com/p/28451.html

上一篇: malloc and calloc

下一篇: preferring malloc over calloc