摘要:函數和函數不同之處在于,函數會將所申請到的內存空間全部初始化成,而函數則不會,這就意味著比運行時間更長,所以在選擇這兩個函數時可以根據是否需要初始化來選擇。切斷和已經釋放的內存空間的聯系。
目錄:動態函數的介紹:malloc? free? calloc? realloc
? ? ? ? ?三、?calloc函數
? ? ? ??calloc函數介紹:
? ? ? ??calloc的使用例子:
? ? ? ??realloc函數的使用例子
函數的參數形式:? ?void* calloc(size_t num , size_t size )
??其中void*是一個可以接受任意類型的指針,size_t表示的是unsigned int(無符號整型)
num表示的是多少個元素,size表示的是一個元素的大小,單位是字節。
1.? calloc函數也是向內存申請空間的,若是申請成功則會返回一個指向內存首地址的指針,
若是申請失敗,則會返回一個NULL(空指針),所以使用該函數也是需要進行判斷是否為
非空指針,否則程序會出錯。
2.calloc函數和malloc函數不同之處在于,calloc函數會將所申請到的內存空間全部
?初始化成0,而malloc函數則不會,這就意味著calloc比malloc運行時間更長,
所以在選擇這兩個函數時可以根據是否需要初始化來選擇。
#include#includeint main(){ int *ptr=(int*)calloc(10,sizeof(int));//用ptr指針來接受calloc返回的值,申請的空間是40字節 if(ptr==NULL) { return 0;//如果沒申請成功則直接結束函數。 } else//為ptr非空的情況 { for(int i=0;i<10;i++) { int kc=*(prt+i)=i;//將所申請的空間賦值 printf("%d ",kc);//打印每個元素 } } free(ptr);//釋放所申請的內存空間,如不則容易導致內存泄漏 ptr=NULL; //ptr還是指向原來所申請的地址,free不會將指針變為空,為了安全手動變為NULL return 0;}
?函數的參數形式:void* realloc(void*ptr , size_t num);
?其中void*ptr是要被改變的指針指向的地址,size_t num是改變之后的大小,單位是字節
? 1.realloc是一個專門用來調整申請動態內存的大小。(也是要和free函數配套使用)
? 2.若realloc要擴大申請的空間,如果原始空間后有位置可追加則就在原指針之后進行追加,
? ?如果不夠則另外找一塊新的空間來,并且把存在舊的內存里的數據移動到新的內存空間,
? ?并且釋放舊的內存空間給操作系統,返回一個指向新的內存地址的指針。
? 3. realloc改變所申請空間的大小和上述函數類似,若申請失敗則返回一個空指針,所以
? ?? 要判斷所返回的值是否為非空,若為非空指針,則可以*ptr=*p。
? ?? (其中*ptr為舊的指針*p為新的指針)??
? ? ? 注:若是將空指針賦值給*ptr,則原始內容地址將丟失(內存泄漏)??
? ?4.realloc函數功能較強大還可以實現malloc函數的功能,如 void* realloc(NULL,size_t? size);
? ? ?? 就是只需對NULL進行追加即可,它等價于void* malloc(size_t? size);
#include#includeint main(){ int* ptr=(int*)calloc(5,sizeof(int));//申請了5個int類型的內存,用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;//若申請失敗則直接退出函數 } else { ptr=p;//將新地址賦給舊的地址 for(int i=5;i<10;i++) { int hi= *(ptr+i)=i; printf("%d ",hi); } } free(ptr);//釋放申請的內存給操作系統,這步必不可少。 ptr=NULL;//切斷ptr和已經釋放的內存空間的聯系。 return 0;}
祝愿各位小伙伴們學有所成!!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119297.html
摘要:對于申請內存失敗,的處理是返回空指針,而的處理是拋異常對于自定義類型,會調用其構造析構函數,而不會。內存泄漏并不是指內存在物理上的消失,而是應用程序分配某段內存后,因為設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。 ...
摘要:棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。棧區主要存放運行函數而分配的局部變量函數參數返回數據返回地址等。 C語言動態內存分配篇 目錄 一、為什么存在動態內存管理/分配? ????????內存的存儲形式劃分 二、動態內存函數的介紹 ????????malloc ...
閱讀 3118·2021-11-15 18:14
閱讀 1773·2021-09-22 10:51
閱讀 3283·2021-09-09 09:34
閱讀 3505·2021-09-06 15:02
閱讀 1013·2021-09-01 11:40
閱讀 3186·2019-08-30 13:58
閱讀 2523·2019-08-30 11:04
閱讀 1081·2019-08-28 18:31