国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
realloc函數(shù)

realloc函數(shù)

  原型:extern void *realloc(void *mem_address, unsigned int newsize);
  用法:#include <stdlib.h> 有些編譯器需要#include <alloc.h>
  功能:改變mem_address所指內(nèi)存區(qū)域的大小為newsize長度。
  說明:如果重新分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。
  當(dāng)內(nèi)存不再使用時,應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。
  注意:這里原始內(nèi)存中的數(shù)據(jù)還是保持不變的。
  舉例
  // realloc.c
  #include <syslib.h>
  #include <alloc.h>
  main()
  {
  char *p;
  clrscr(); // clear screen
  p=(char *)malloc(100);
  if(p)
  printf("Memory Allocated at: %x",p);
  else
  printf("Not Enough Memory!\n");
  getchar();
  p=(char *)realloc(p,256);
  if(p)
  printf("Memory Reallocated at: %x",p);
  else
  printf("Not Enough Memory!\n");
  free(p);
  getchar();
  return 0;
  }
  詳細(xì)說明及注意要點(diǎn):
  1、如果有足夠空間用于擴(kuò)大mem_address指向的內(nèi)存塊,則分配額外內(nèi)存,并返回mem_address
  這里說的是“擴(kuò)大”,我們知道,realloc是從堆上分配內(nèi)存的,當(dāng)擴(kuò)大一塊內(nèi)存空間時, realloc()試圖直接從堆上現(xiàn)存的數(shù)據(jù)后面的那些字節(jié)中獲得附加的字節(jié),如果能夠滿足,自然天下太平。也就是說,如果原先的內(nèi)存大小后面還有足夠的空閑空間用來分配,加上原來的空間大?。?newsize。那么就ok。得到的是一塊連續(xù)的內(nèi)存。
  2、如果原先的內(nèi)存大小后面沒有足夠的空閑空間用來分配,那么從堆中另外找一塊newsize大小的內(nèi)存。
  并把原來大小內(nèi)存空間中的內(nèi)容復(fù)制到newsize中。返回新的mem_address指針。(數(shù)據(jù)被移動了)。
  老塊被放回堆上。
  例如:
  #include <malloc.h>
  void main()
  {
  char *p,*q;
  p = (char * ) malloc (10);
  q=p;
  p = (char * ) realloc (p,20); //A
  …………………………
  }
  在這段程序中我們增加了指針q,用它記錄了原來的內(nèi)存地址p。這段程序可以編譯通過,但在執(zhí)行到A行時,如果原有內(nèi)存后面沒有足夠空間將原有空間擴(kuò)展成一個連續(xù)的新大小的話,realloc函數(shù)就會以第二種方式分配內(nèi)存,此時數(shù)據(jù)發(fā)生了移動,那么所記錄的原來的內(nèi)存地址q所指向的內(nèi)存空間實(shí)際上已經(jīng)放回到堆上了!這樣就會產(chǎn)生q指針的指針懸掛,如果再用q指針進(jìn)行操作就可能發(fā)生意想不到的問題。所以在應(yīng)用realloc函數(shù)是應(yīng)當(dāng)格外注意這種情況。
  3、返回情況
  返回的是一個void類型的指針,調(diào)用成功。(這就再你需要的時候進(jìn)行強(qiáng)制類型轉(zhuǎn)換)
  返回NULL,當(dāng)需要擴(kuò)展的大?。ǖ诙€參數(shù))為0并且第一個參數(shù)不為NULL,此時原內(nèi)存變成了“freed(游離)”的了。
  返回NULL,當(dāng)沒有足夠的空間可供擴(kuò)展的時候,此時,原內(nèi)存空間的大小維持不變。
  4、特殊情況
  如果mem_address為null,則realloc()和malloc()類似。分配一個newsize的內(nèi)存塊,返回一個指向該內(nèi)存塊的指針。
  如果newsize大小為0,那么釋放mem_address指向的內(nèi)存,并返回null。
  如果沒有足夠可用的內(nèi)存用來完成重新分配(擴(kuò)大原來的內(nèi)存塊或者分配新的內(nèi)存塊),則返回null.而原來的內(nèi)存塊保持不變。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一個實(shí)用的、可應(yīng)用于單片機(jī)的內(nèi)存管理模塊
一份通俗易懂的C語言內(nèi)存總結(jié)
C和指針之動態(tài)內(nèi)存分配malloc、calloc、realloc簡單使用和區(qū)別
程序分區(qū)模型(代碼實(shí)例解析)
動態(tài)內(nèi)存分配,地址對齊
C語言內(nèi)存泄漏之free、valgrind、examine
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服