国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C > 正文

C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解

2020-01-26 14:00:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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è)問(wèn)題。

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)使用間接訪問(wèn)

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. 常見(jiàn)的動(dòng)態(tài)內(nèi)存錯(cuò)誤

常見(jiàn)的錯(cuò)誤有:對(duì)NULL指針進(jìn)行解引用操作、對(duì)分配的內(nèi)存進(jìn)行操作時(shí)越過(guò)邊界、釋放并非內(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)存分配的資料講解,如有疑問(wèn)請(qǐng)大家留言或者到本站社區(qū)討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 炉霍县| 西吉县| 黔西县| 横山县| 定安县| 和林格尔县| 盐池县| 寿光市| 班玛县| 越西县| 长泰县| 巴青县| 广汉市| 东莞市| 科技| 富民县| 淮滨县| 赣榆县| 洱源县| 瑞昌市| 汉中市| 金塔县| 山东| 特克斯县| 华池县| 酒泉市| 浦北县| 郯城县| 离岛区| 兴安县| 东海县| 上虞市| 娱乐| 成都市| 宜阳县| 塔城市| 龙游县| 德州市| 新泰市| 唐河县| 宜都市|