C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解
C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解
1.為什么使用動(dòng)態(tài)內(nèi)存分配
數(shù)組在使用的時(shí)候可能造成內(nèi)存浪費(fèi),使用動(dòng)態(tài)內(nèi)存分配可以解決這個(gè)問題。
2. malloc和free
C函數(shù)庫(kù)提供了兩個(gè)函數(shù),malloc和free,分別用于執(zhí)行動(dòng)態(tài)內(nèi)存分配和釋放。
(1)void *malloc(size_t size);
malloc的參數(shù)就是需要分配的內(nèi)存字節(jié)數(shù)。malloc分配一塊連續(xù)的內(nèi)存。如果操作系統(tǒng)無(wú)法向malloc提供更多的內(nèi)存,malloc就返回一個(gè)NULL指針。
(2)void free(void *pointer);
free的參數(shù)要么是NULL,要么是一個(gè)先前從malloc、calloc或realloc返回的值。
3. calloc和realloc
(1)void *calloc(size_t num_elements,size_t element_size);
calloc也用于內(nèi)存分配。malloc和calloc之間的主要區(qū)別是后者在返回指向內(nèi)存的指針之前把它初始化為0。
(2)realloc(void *ptr,size_t new_size);
realloc函數(shù)用于修改一個(gè)原先已經(jīng)分配的內(nèi)存塊的大小。如果它用于擴(kuò)大一個(gè)內(nèi)存,那么這塊內(nèi)存原先的內(nèi)容依然保留,新增加的內(nèi)存添加到原先內(nèi)存塊的后面。如果它用于縮小一個(gè)內(nèi)存塊,該內(nèi)存塊尾部的部分內(nèi)存被拿掉,剩余部分內(nèi)存的原先內(nèi)容依然保留。
4. 使用動(dòng)態(tài)分配的內(nèi)存
(1)使用示例
int *pi;
pi = malloc(25 * sizeof(int));
if(pi == NULL){
printf("out of memery\n");
exit(1);
}
(2)使用間接訪問
int *pi2,i; pi2 = pi; for(i = 0;i < 25;i += 1) *pi2++ = 0;
也可以使用下標(biāo)。
int i; for(i = 0;i < 25;i += 1) *pi[i] = 0;
5. 常見的動(dòng)態(tài)內(nèi)存錯(cuò)誤
常見的錯(cuò)誤有:對(duì)NULL指針進(jìn)行解引用操作、對(duì)分配的內(nèi)存進(jìn)行操作時(shí)越過邊界、釋放并非內(nèi)存分配的內(nèi)存、試圖釋放一塊動(dòng)態(tài)分配的內(nèi)存的一部分以及一塊動(dòng)態(tài)內(nèi)存釋放之后被繼續(xù)使用。
以上就是對(duì)C語(yǔ)言中動(dòng)態(tài)內(nèi)存分配的資料講解,如有疑問請(qǐng)大家留言或者到本站社區(qū)討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配的詳解及實(shí)例
- C語(yǔ)言中關(guān)于動(dòng)態(tài)內(nèi)存分配的詳解
- C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配詳解
- c語(yǔ)言詳解動(dòng)態(tài)內(nèi)存分配及常見錯(cuò)誤的解決
- C語(yǔ)言編程C++動(dòng)態(tài)內(nèi)存分配示例講解
- C語(yǔ)言動(dòng)態(tài)內(nèi)存分配函數(shù)的實(shí)現(xiàn)
- C語(yǔ)言動(dòng)態(tài)內(nèi)存分配圖文講解
- c語(yǔ)言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例
- 深入了解C語(yǔ)言中的動(dòng)態(tài)內(nèi)存分配
- C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
C++實(shí)現(xiàn)LeetCode(904.水果裝入果籃)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(904.水果裝入果籃),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
如何使用C語(yǔ)言實(shí)現(xiàn)細(xì)菌的繁殖與擴(kuò)散
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)細(xì)菌的繁殖與擴(kuò)散,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Qt學(xué)習(xí)筆記之QPalette調(diào)色板類
這篇文章主要為大家詳細(xì)介紹了Qt學(xué)習(xí)筆記之QPalette調(diào)色板類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
C++生成格式化的標(biāo)準(zhǔn)字符串實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于C++生成格式化的標(biāo)準(zhǔn)字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
C++中使用mutable關(guān)鍵字的場(chǎng)景分析
C++中的mutable關(guān)鍵字用于修飾類的成員變量,使其在const成員函數(shù)中可以被修改,它主要用于緩存、線程同步和調(diào)試等場(chǎng)景,以支持對(duì)象的邏輯常量性,在使用mutable時(shí),應(yīng)確保其修改不會(huì)破壞對(duì)象的外部表現(xiàn)狀態(tài),本文介紹C++中使用mutable關(guān)鍵字的場(chǎng)景分析,感興趣的朋友一起看看吧2025-02-02

