2010年9月7日星期二

内存分配(malloc/realloc/calloc区别)

 三个函数的声明分别是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);v
oid* calloc(size_t nelem, size_t elsize);都在stdlib.h函数库内。

C语言的标准内存分配函数:malloc,calloc,realloc等。
       malloc与calloc的区别为1块与n块的区别:malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为"size"字节的连续区域,返回该区域的首地址。

       calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为"size"字节的连续区域,返回首地址。

       realloc 不能保证重新分配后的内存空间和原来的内存空间指在同一内存地址, 它返回的指针很可能指向一个新的地址。
  所以,在代码中,必须把realloc返回的值,重新赋给 p 如:
  p = (char *) realloc (p, old_size + new_size);
  
  甚至,你可以传一个空指针(0)给 realloc ,则此时realloc 作用完全相当于malloc。
  int* p = (char *) realloc (0,old_size + new_size); //全新分配一个内存空间
作用完全等同于以下这行:
    int* p = (char *) malloc(old_size + new_size);
  
  calloc(len, size)与malloc相似,参数len为申请地址的单位元素长度,size为元素个数,如:
  char* p;
  p=(char*)calloc(sizeof(char),1000);

没有评论:

发表评论