C語言基礎(chǔ)(3)內(nèi)存分配malloc與free

圖片發(fā)自簡書App

1削彬、申請內(nèi)存的區(qū)域

棧區(qū)全庸、堆區(qū)、全局區(qū)融痛、字符常量區(qū)壶笼、代碼區(qū)

定義的變量數(shù)組等都是在棧區(qū)申請,棧區(qū)的內(nèi)存由系統(tǒng)申請和釋放雁刷,在變量生命周期結(jié)束時釋放覆劈,默認(rèn)大小是1MB。

堆區(qū)由我們隨時申請沛励,也由我們隨時釋放责语。


2、malloc函數(shù)

功能:從堆區(qū)申請指定大小的連續(xù)的一段空間目派。如int *p=(int *)malloc(4)申請了一個4字節(jié)的int型的空間坤候,返回結(jié)果是該片內(nèi)存的首地址,這里的(int *)是強(qiáng)制類型轉(zhuǎn)換企蹭。申請的空間大小也可以是表達(dá)式或者sizeof()*n等白筹。

頭文件是malloc.h和stdlib.h兩個,32位系統(tǒng)最多申請4G练对,64位最大支持16TB遍蟋。

三種情況:申請空間合理當(dāng)該空間釋放時可能會產(chǎn)生內(nèi)存碎片(釋放的內(nèi)存無法滿足新的程序所需的內(nèi)存大小)螟凭;申請空間為0(malloc(0))會返回一個可用空間首地址,但是地址長度為0它呀;申請空間過大時會發(fā)生溢出警告螺男。

注意點:①注意邊界

②一個指針指向了一塊堆區(qū)空間,不能將該指針指向另外一個地址空間纵穿,否則會導(dǎo)致內(nèi)存丟失或者內(nèi)存泄漏下隧,沒法對之前指向的地址進(jìn)行釋放等操作。當(dāng)一個新的指針指向原來的地址谓媒,那么原來的指針可以釋放淆院。


3、size_t函數(shù)

size_t=unsigned int(32位編譯環(huán)境是4字節(jié)int句惯,64位是8位longint)

4土辩、memset函數(shù)

memset函數(shù)是內(nèi)存賦值,按照字節(jié)依次賦值抢野,得包涵memory.h頭文件拷淘。

int *p=malloc(40);申請一個40字節(jié)的int型地址指孤,也就是包含10個int型的參數(shù)启涯。

memset(p贬堵,1,40)结洼;使用memset進(jìn)行賦值黎做。

每個字節(jié)有8位,即每一個字節(jié)都被賦值為0000_0001松忍,那么將4個字節(jié)拼為一個int型引几,這里的值顯然不是1。

因此挽铁,memset函數(shù)只能用于將元素全部賦0伟桅。


5、free函數(shù)

功能:釋放申請的內(nèi)存

寫法:free(p)叽掘,無返回值楣铁,p是申請空間的首地址。

另外更扁,如果指針指向的空間訪問受限盖腕,那么稱之為野指針,不能直接使用浓镜。free后的p就是野指針溃列,之后可以將p=NULL或p=0可以解決,另外的沒有初始化的指針也是野指針膛薛。

要點:①不能釋放棧區(qū)空間听隐;

②不能重復(fù)釋放同一個空間;

③一定要釋放頭指針哄啄。


6雅任、malloc的空間在程序結(jié)束時,系統(tǒng)會自動釋放malloc的內(nèi)存咨跌,那為什么還要free()沪么?

在使用軟件的過程中,程序沒有停止那么malloc申請的空間就不會被釋放锌半,那么如果不手工釋放的話禽车,軟件運(yùn)行過程中會在很短時間內(nèi)就內(nèi)存溢出(總不能3分鐘一關(guān)或者重啟吧)。


7刊殉、malloc申請數(shù)組空間

malloc返回申請的空間的首地址殉摔,可以用強(qiáng)制轉(zhuǎn)換該地址的類型

int *p=(int *)malloc(sizeof(int)*5);//在堆區(qū)申請4*5=20個字節(jié)的連續(xù)地址空間

p+1冗澈;//訪問的是第五個字節(jié)的地址钦勘,也就是第二個int 型的元素的首地址

malloc申請的數(shù)組也被稱為動態(tài)數(shù)組,可以在使用時動態(tài)申請不定長度的數(shù)組空間亚亲,而申請后的數(shù)組的長度是不可變得彻采。

malloc申請的地址空間不能進(jìn)行初始化腐缤,但是可以賦值,賦值可以使用循環(huán)語句或者memset賦值為0


8肛响、malloc與一維二維數(shù)組指針

一維數(shù)組:int (*p)[5]=(int (*)[5])malloc(sizeof(int)*5); ? ??//小括號不能丟岭粤,丟了就是指針數(shù)組

int a[5];

int (*p1)[5]=&a; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //這里的p1和p等價

(*p1)[n]來訪問數(shù)組元素。

二維數(shù)組:int(*p)[2][3]=(int (*)[2][3])malloc(sizeof(int)*2*3);

int(*p1)[2][3]=&a; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //同理這里的p1和p等價

(*p1)[i][j]來訪問數(shù)組元素特笋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剃浇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猎物,更是在濱河造成了極大的恐慌虎囚,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔫磨,死亡現(xiàn)場離奇詭異淘讥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堤如,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蒲列,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搀罢,你說我怎么就攤上這事蝗岖。” “怎么了榔至?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵抵赢,是天一觀的道長。 經(jīng)常有香客問我洛退,道長瓣俯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任兵怯,我火速辦了婚禮,結(jié)果婚禮上腔剂,老公的妹妹穿的比我還像新娘媒区。我一直安慰自己,他們只是感情好掸犬,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布袜漩。 她就那樣靜靜地躺著,像睡著了一般湾碎。 火紅的嫁衣襯著肌膚如雪宙攻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天介褥,我揣著相機(jī)與錄音座掘,去河邊找鬼递惋。 笑死,一個胖子當(dāng)著我的面吹牛溢陪,可吹牛的內(nèi)容都是我干的萍虽。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼形真,長吁一口氣:“原來是場噩夢啊……” “哼杉编!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咆霜,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤邓馒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛾坯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體光酣,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年偿衰,在試婚紗的時候發(fā)現(xiàn)自己被綠了挂疆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡下翎,死狀恐怖缤言,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情视事,我是刑警寧澤胆萧,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站俐东,受9級特大地震影響跌穗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虏辫,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一蚌吸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砌庄,春花似錦羹唠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萌焰,卻和暖如春哺眯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扒俯。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工奶卓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留一疯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓寝杖,卻偏偏與公主長得像违施,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瑟幕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • C語言中內(nèi)存分配 在任何程序設(shè)計環(huán)境及語言中磕蒲,內(nèi)存管理都十分重要。在目前的計算機(jī)系統(tǒng)或嵌入式系統(tǒng)中只盹,內(nèi)存資源仍然是...
    一生信仰閱讀 1,153評論 0 2
  • 1.C和C++的區(qū)別辣往?C++的特性?面向?qū)ο缶幊痰暮锰帲?答:c++在c的基礎(chǔ)上增添類殖卑,C是一個結(jié)構(gòu)化語言站削,它的重...
    杰倫哎呦哎呦閱讀 9,496評論 0 45
  • 一、C語言基礎(chǔ) 1孵稽、struct 的內(nèi)存對齊和填充問題其實只要記住一個概念和三個原則就可以了: 一個概念:自然對齊...
    XDgbh閱讀 2,203評論 1 38
  • (JG-2014-08-20)(前半部分經(jīng)過網(wǎng)上多篇文章對比整理)(后半部分根據(jù)ExceptionalCpp许起、C+...
    JasonGao閱讀 5,599評論 2 23
  • jiajiaemon閱讀 178評論 0 0