成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

動態(tài)內(nèi)存管理(下)

asoren / 3514人閱讀

摘要:函數(shù)和函數(shù)不同之處在于,函數(shù)會將所申請到的內(nèi)存空間全部初始化成,而函數(shù)則不會,這就意味著比運行時間更長,所以在選擇這兩個函數(shù)時可以根據(jù)是否需要初始化來選擇。切斷和已經(jīng)釋放的內(nèi)存空間的聯(lián)系。

目錄:動態(tài)函數(shù)的介紹:malloc? free? calloc? realloc

? ? ? ? ?三、?calloc函數(shù)

? ? ? ??calloc函數(shù)介紹:

? ? ? ??calloc的使用例子:

四、?realloc函數(shù)

? ? ? ??realloc函數(shù)介紹:

? ? ? ??realloc函數(shù)的使用例子


動態(tài)函數(shù)的介紹:malloc? free? calloc? realloc

三、calloc函數(shù)

函數(shù)的參數(shù)形式:? ?void* calloc(size_t num , size_t size )

??其中void*是一個可以接受任意類型的指針,size_t表示的是unsigned int(無符號整型)

num表示的是多少個元素,size表示的是一個元素的大小,單位是字節(jié)

calloc函數(shù)介紹:

1.? calloc函數(shù)也是向內(nèi)存申請空間的,若是申請成功則會返回一個指向內(nèi)存首地址的指針,

若是申請失敗,則會返回一個NULL(空指針),所以使用該函數(shù)也是需要進行判斷是否為

非空指針,否則程序會出錯。

2.calloc函數(shù)和malloc函數(shù)不同之處在于,calloc函數(shù)會將所申請到的內(nèi)存空間全部

?初始化成0,而malloc函數(shù)則不會,這就意味著calloc比malloc運行時間更長,

所以在選擇這兩個函數(shù)時可以根據(jù)是否需要初始化來選擇。

calloc的使用例子:

#include#includeint main(){     int *ptr=(int*)calloc(10,sizeof(int));//用ptr指針來接受calloc返回的值,申請的空間是40字節(jié)      if(ptr==NULL)      {         return 0;//如果沒申請成功則直接結(jié)束函數(shù)。      }       else//為ptr非空的情況      {          for(int i=0;i<10;i++)            {                 int kc=*(prt+i)=i;//將所申請的空間賦值              printf("%d ",kc);//打印每個元素            }                 }            free(ptr);//釋放所申請的內(nèi)存空間,如不則容易導(dǎo)致內(nèi)存泄漏        ptr=NULL; //ptr還是指向原來所申請的地址,free不會將指針變?yōu)榭?,為了安全手動變?yōu)镹ULL   return 0;}

四、realloc函數(shù)

?函數(shù)的參數(shù)形式void* realloc(void*ptr , size_t num);

?其中void*ptr是要被改變的指針指向的地址,size_t num是改變之后的大小,單位是字節(jié)

? realloc函數(shù)介紹:

? 1.realloc是一個專門用來調(diào)整申請動態(tài)內(nèi)存的大小。(也是要和free函數(shù)配套使用)

? 2.若realloc要擴大申請的空間,如果原始空間后有位置可追加則就在原指針之后進行追加,

? ?如果不夠則另外找一塊新的空間來,并且把存在舊的內(nèi)存里的數(shù)據(jù)移動到新的內(nèi)存空間

? ?并且釋放舊的內(nèi)存空間給操作系統(tǒng),返回一個指向新的內(nèi)存地址的指針。

? 3. realloc改變所申請空間的大小和上述函數(shù)類似,若申請失敗則返回一個空指針,所以

? ?? 要判斷所返回的值是否為非空,若為非空指針,則可以*ptr=*p。

? ?? (其中*ptr為舊的指針*p為新的指針)??

? ? ? 注:若是將空指針賦值給*ptr,則原始內(nèi)容地址將丟失(內(nèi)存泄漏)??

? ?4.realloc函數(shù)功能較強大還可以實現(xiàn)malloc函數(shù)的功能,如 void* realloc(NULL,size_t? size);

? ? ?? 就是只需對NULL進行追加即可,它等價于void* malloc(size_t? size);

realloc函數(shù)的使用例子:

#include#includeint main(){   int* ptr=(int*)calloc(5,sizeof(int));//申請了5個int類型的內(nèi)存,用ptr去接受返回來的指針   if(ptr!=NULL)     { for(int i=0;i<5;i++)         {           int input= *(ptr+i)=i;           printf("%d ",input);         }     }       int*p=(int*)realloc(ptr,40);//原ptr申請為10個int類型     if(p==NULL)//這步判斷不可少       {          return 0;//若申請失敗則直接退出函數(shù)       }     else     {         ptr=p;//將新地址賦給舊的地址         for(int i=5;i<10;i++)              {                 int hi= *(ptr+i)=i;                 printf("%d ",hi);              }     }        free(ptr);//釋放申請的內(nèi)存給操作系統(tǒng),這步必不可少。        ptr=NULL;//切斷ptr和已經(jīng)釋放的內(nèi)存空間的聯(lián)系。    return 0;}

祝愿各位小伙伴們學(xué)有所成?。。?!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/119297.html

相關(guān)文章

  • C++內(nèi)存管理

    摘要:對于申請內(nèi)存失敗,的處理是返回空指針,而的處理是拋異常對于自定義類型,會調(diào)用其構(gòu)造析構(gòu)函數(shù),而不會。內(nèi)存泄漏并不是指內(nèi)存在物理上的消失,而是應(yīng)用程序分配某段內(nèi)存后,因為設(shè)計錯誤,失去了對該段內(nèi)存的控制,因而造成了內(nèi)存的浪費。 ...

    mudiyouyou 評論0 收藏0
  • 【C語言進階】動態(tài)內(nèi)存管理/分配

    摘要:棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。棧區(qū)主要存放運行函數(shù)而分配的局部變量函數(shù)參數(shù)返回數(shù)據(jù)返回地址等。 C語言動態(tài)內(nèi)存分配篇 目錄 一、為什么存在動態(tài)內(nèi)存管理/分配? ????????內(nèi)存的存儲形式劃分 二、動態(tài)內(nèi)存函數(shù)的介紹 ????????malloc ...

    Carson 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<