malloc函数申请所申请的内存是从其他不需要的内存中申请过来的,内存中的数据是随机的。
而calloc函数所申请内存中的数据是零的,calloc相当于malloc+memset。
当然,既然有calloc函数,为什么还要用malloc函数呢?因为在用户空间申请内存时,有很多情况下是不需要将内存中的数据置零的。所以在想让申请的内存数据为零就用calloc函数吧。
注意:在申请内存用完需要释放时,一定要记得释放,否则会造成内存泄露。释放之后一定要将定义的指针指向NULL,否则会造成野指针。所以,如果经常忘记释放的话,尽量使用定义一个变量的方式去使用一块内存。
另,如果在使用malloc函数时将参数赋值0的话会如何呢?
测试用例:
#include <stdio.h>
#include <malloc.h>
int main()
{
unsigned int * p = NULL;
p = (unsigned int *)malloc(0);
if(p)
printf("malloc sucess.\n");
else
printf("malloc failed.\n");
if(*p)
printf("!0 value\n");
else
printf("0 value\n");
free(p);
return 0;
}
竟然申请成功了!???
而且内存的值还是零,额,(打脸)我不写了,去百度吧。