malloc 與 realloc

1)假如原來的內存後面還有足夠多剩餘內存的話,realloc的內存=原來的內存+剩餘內存,realloc還是返回原來內存的地址; 

2)假如原來的內存後面沒有足夠多剩餘內存的話,realloc將申請新的內存,然後把原來的內存數據拷貝到新內存裏,原來的內存將被free掉,realloc返回新內存的地址.

3)如果沒有足夠可用的內存用來完成重新分配(擴大原來的內存塊或者分配新的內存塊),則返回null.而原來的內存塊保持不變。

4)如果newsize大小爲0,那麼釋放原內存,相當於free(),並返回null。

函數簡介

  原型:extern void *realloc(void *mem_address, unsigned int newsize);
  語法:指針名=(數據類型*)realloc(要改變內存大小的指針名,新的大小)。//新的大小一定要大於原來的大小不然的話會導致數據丟失!
  頭文件:#include <stdlib.h> 有些編譯器需要#include <alloc.h>,在TC2.0中可以使用alloc.h頭文件
  功能:先按照newsize指定的大小分配空間,將原有數據從頭到尾拷貝到新分配的內存區域,而後釋放原來mem_address所指內存區域,同時返回新分配的內存區域的首地址。即重新分配存儲器塊的地址。
  返回值:如果重新分配成功則返回指向被分配內存的指針,否則返回空指針NULL。 
  注意:這裏原始內存中的數據還是保持不變的。當內存不再使用時,應使用free()函數將內存塊釋放。

  #include<stdio.h>

  #include<stdlib.h>
  int main()
  {
  int i;
  int *pn=(int *)malloc(5*sizeof(int));
  printf("%p\n",pn);
  for(i=0;i<5;i++)
  scanf("%d",&pn[i]);
  pn=(int *)realloc(pn,10*sizeof(int));
  printf("%p\n",pn);
  for(i=0;i<5;i++)
  printf("%3d",pn[i]);
  printf("\n");
  free(pn);
  return 0;
  }


參考:http://baike.baidu.com/view/736230.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章