malloc的两个兄弟calloc,realloc你认识吗?

来源:互联网 发布:327国债事件 知乎 编辑:程序博客网 时间:2024/05/16 10:59
看下面程序,然后解释:
              

                                                        

                                                       

malloc:
     1,其内只有一个参数,一个指定所需字节数的整数。
     2,malloc它允许从空间内存池中分配内存。
     3,使用malloc时,已分配的内存中可以是任意的值.
     4,
函数原型 : void *malloc(unsigned size)。//动态申请size个字节的内存空间;
                         功能:在内存的动态存储区中分配一块长度为" size" 字节的
     5,(类型说明符*)表示把返回值强制转换为该类型指针。

calloc:
     
1,存储在已分配的内存空间中的值默认为0.
     2,colloc需要两个参数,第一个是需要分配内存的变量的个数,第二个是每个变量的大小.
     3,(void *)calloc(unsigned n,unsigned size)//      用于向系统动态申请n个, 每个占size个字节的内存空间;
         
并把分配的内存全都初始化为零值。函数的返回值为该区域的首地址
     4,
     5,

区别:两者都是动态分配内存。主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc 初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。 

realloc: 
     1,原型:extern void *realloc(void *mem_address, unsigned int newsize); 
     2,用法:#include <stdlib.h> 有些编译器需要#include <alloc.h>
     3,功能:改变mem_address所指内存区域的大小为newsize长度。
     4,说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 
     5, 当内存不再使用时,应使用free()函数将内存块释放。
     6,
注意:这里原始内存中的数据还是保持不变的。
     7,
(void *)realloc(void *p,unsigned size)//将指针p所指向的已分配内存区的大小改为size 
0 0
原创粉丝点击