C語言內(nèi)存管理
一:相關(guān)動(dòng)態(tài)內(nèi)存函數(shù)
(1)malloc和free



free用于釋放mallco開辟的空間,malloc和free要成對(duì)使用,開辟的空間如果不使用了,一定要將其free掉,如果不free掉,堆區(qū)空間會(huì)越擠越大的(除非程序直接結(jié)束)。
同時(shí)當(dāng)那個(gè)指針?biāo)缚臻gfree掉之后,由于指針其實(shí)還是已經(jīng)保存了那片空間的地址,這個(gè)行為是相當(dāng)危險(xiǎn)的,因?yàn)檎业街羔樉陀锌赡軙?huì)改變它,所以為了徹底斷絕他們的聯(lián)系,在free掉之后,要將指針置為NULL。

(2)calloc
calloc函數(shù)和malloc函數(shù)的作用相同,都是用來動(dòng)態(tài)開辟的。calloc與malloc所不同的是地方是兩者參數(shù)格式不一樣,并且calloc在開辟的同時(shí)會(huì)將此空間初始化為0, 而malloc則為隨機(jī)值。

malloc情況
calloc語法格式為:
int* p=(int*) calloc(10,sizeof(int));

(3)realloc
在申請(qǐng)好空間后,如果發(fā)現(xiàn)申請(qǐng)的空間不合適,過大或者過小,就可以使用realloc來進(jìn)行調(diào)整

比如下面的例子中申請(qǐng)了20個(gè)字節(jié)后發(fā)現(xiàn)空間不夠,然后重新調(diào)整


需要注意:realloc申請(qǐng)空間有兩種方式
在堆區(qū)重新調(diào)整空間必然會(huì)遇到兩種情況:
第一種原有的空間后面有足夠大的空間,那么申請(qǐng)時(shí)相當(dāng)于就在原有空間后面補(bǔ)上缺的部分,這樣其返回的仍然是原來空間的地址;
第二種原有的空間后面不夠大,realloc會(huì)重新找一片能完整存放的區(qū)域,然后把之前的內(nèi)容照搬賦值過來,并釋放先前空間


版權(quán)聲明:本文為CSDN博主「快樂江湖」的原創(chuàng)文章。如有侵權(quán),請(qǐng)聯(lián)系刪除。
原文鏈接:【C語言重點(diǎn)難點(diǎn)精講】C語言內(nèi)存管理_快樂江湖的博客-CSDN博客_c語言 內(nèi)存管理