为啥大家都喜欢用MALLOC,而不用CALLOC

ninaibei 2006-02-21 03:08:57
用CALLOC是不用初始化的,直接就附了初值0,为啥基本都用MALLOC???
...全文
1432 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
digifish 2006-02-21
  • 打赏
  • 举报
回复
~ 回复人:du51(郁郁思扬) ( 一星(中级)) 信誉:100 2006-02-21 15:33:00 得分:0
~ 两者本质一样,就在于CALLOC最后调用宏把内存清零.
~ 但是,用REALLOC 和FREE的时候,最好是由MALLOC分配的.用CALLOC分配的会使风险升高.

不明白calloc有什么风险?
R99 2006-02-21
  • 打赏
  • 举报
回复
void *calloc(size_t nobj, size_t size)
calloc returns a pointer to space for an array of nobj objects, each of size size, or NULL if the request cannot be satisfied. The space is initialized to zero bytes.

void *malloc(size_t size)
malloc returns a pointer to space for an object of size size, or NULL if the request cannot be satisfied. The space is uninitialized.

void *realloc(void *p, size_t size)
realloc changes the size of the object pointed to by p to size. The contents will be unchanged up to the minimum of the old and new sizes. If the new size is larger, the new space is uninitialized. realloc returns a pointer to the new space, or NULL if the request cannot be satisfied, in which case *p is unchanged.

void free(void *p)
free deallocates the space pointed to by p; it does nothing if p is NULL. p must be a pointer to space previously allocated by calloc, malloc, or realloc.

看起来这三个函数有些差别,各有各适用的场合吧。
EarthKing 2006-02-21
  • 打赏
  • 举报
回复
个人习惯问题吧, 就像大家都喜欢用 i++ 而不喜欢用 i += 1, 其实编译优化之后都是一样的结果, 而且 i += 1 看起来还更直观些....
  • 打赏
  • 举报
回复
用 malloc 可以少打几个键 ....
cdo 2006-02-21
  • 打赏
  • 举报
回复
还真没用过calloc来分配内容
blh 2006-02-21
  • 打赏
  • 举报
回复
p = calloc(1, n) <==> p = malloc(n); memset(p, 0, n);
逸学堂 2006-02-21
  • 打赏
  • 举报
回复
1.分配内存空间函数malloc

  调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。

2.分配内存空间函数 calloc

  calloc 也用于分配内存空间。调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

C语言的标准内存分配函数:malloc,calloc,realloc,free等。
malloc与calloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域,返回首地址。
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。
free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。
C++中为new/delete函数。

du51 2006-02-21
  • 打赏
  • 举报
回复
我想了想,还有一个原因.大家大都从老谭的书入门的.那本书上,大都用MALLOC...所以就这样.
du51 2006-02-21
  • 打赏
  • 举报
回复
两者本质一样,就在于CALLOC最后调用宏把内存清零.

但是,用REALLOC 和FREE的时候,最好是由MALLOC分配的.用CALLOC分配的会使风险升高.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧