c語(yǔ)言malloc函數(shù)的用法示例和意義
當(dāng)我們需要做一個(gè)成績(jī)管理系統(tǒng),人數(shù)可能為全校學(xué)生,也可能為一個(gè)班的學(xué)生,當(dāng)我們開(kāi)辟一個(gè)班的數(shù)組大小時(shí),如果要存儲(chǔ)整個(gè)學(xué)校的人數(shù)時(shí),會(huì)出現(xiàn)內(nèi)存不夠用的情況;當(dāng)我們開(kāi)辟全校人數(shù)大小的數(shù)組時(shí),輸入一個(gè)班人數(shù)的大小時(shí),會(huì)出現(xiàn)內(nèi)存浪費(fèi)的情況。
為了應(yīng)對(duì)上述問(wèn)題,我們引入malloc函數(shù)。
malloc時(shí)動(dòng)態(tài)內(nèi)存分配函數(shù),用于申請(qǐng)一塊連續(xù)的指定大小的內(nèi)存塊區(qū)域以void*類型返回分配的內(nèi)存區(qū)域地址
malloc函數(shù)原型
extern void *malloc(unsigned int num_bytes);
意為分配長(zhǎng)度為num_bytes字節(jié)的內(nèi)存塊
malloc函數(shù)頭文件
#include<malloc.h>
malloc函數(shù)返回值
如果分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。
malloc函數(shù)使用注意事項(xiàng)
malloc函數(shù)的返回的是無(wú)類型指針,在使用時(shí)一定要強(qiáng)制轉(zhuǎn)換為所需要的類型。
**(敲黑板)重點(diǎn):在使用malloc開(kāi)辟空間時(shí),使用完成一定要釋放空間,如果不釋放會(huì)造內(nèi)存泄漏。
在使用malloc函數(shù)開(kāi)辟的空間中,不要進(jìn)行指針的移動(dòng),因?yàn)橐坏┮苿?dòng)之后可能出現(xiàn)申請(qǐng)的空間和釋放空間大小的不匹配
malloc函數(shù)使用形式
關(guān)于malloc所開(kāi)辟空間類型:malloc只開(kāi)辟空間,不進(jìn)行類型檢查,只是在使用的時(shí)候進(jìn)行類型的強(qiáng)轉(zhuǎn)。
舉個(gè)例子:‘我’開(kāi)辟你所需要大小的字節(jié)大小空間,至于怎么使用是你的事
mallo函數(shù)返回的實(shí)際是一個(gè)無(wú)類型指針,必須在其前面加上指針類型強(qiáng)制轉(zhuǎn)換才可以使用
指針自身 = (指針類型*)malloc(sizeof(指針類型)*數(shù)據(jù)數(shù)量)
int *p = NULL; int n = 10; p = (int *)malloc(sizeof(int)*n);
在使用malloc函數(shù)之前我們一定要計(jì)算字節(jié)數(shù),malloc開(kāi)辟的是用戶所需求的字節(jié)數(shù)大小的空間。
如果多次申請(qǐng)空間那么系統(tǒng)是如何做到空間的不重復(fù)使用呢?
在使用malloc開(kāi)辟一段空間之后,系統(tǒng)會(huì)在這段空間之前做一個(gè)標(biāo)記(0或1),當(dāng)malloc函數(shù)開(kāi)辟空間如果遇到標(biāo)記為0就在此開(kāi)辟,如果為1說(shuō)明此空間正在被使用。
free函數(shù)
作用:釋放malloc(或calloc、realloc)函數(shù)給指針變量分配的內(nèi)存空間。
注意:使用后該指針變量一定要重新指向NULL,防止懸空指針(失效指針)出現(xiàn),有效規(guī)避錯(cuò)誤操作。
int main() { int *p = (int *)malloc(sizeof(int)); *p = 100; free(p); p = NULL; return 0;
free函數(shù)在釋放空間之后,把內(nèi)存前的標(biāo)志變?yōu)?,且為了防止數(shù)據(jù)泄露,它會(huì)把所釋放的空間用cd進(jìn)行填充。
到此這篇關(guān)于c語(yǔ)言malloc函數(shù)的用法示例和意義的文章就介紹到這了,更多相關(guān)c語(yǔ)言malloc函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言詳細(xì)分析講解內(nèi)存管理malloc realloc free calloc函數(shù)的使用
- C語(yǔ)言初識(shí)動(dòng)態(tài)內(nèi)存管理malloc calloc realloc free函數(shù)
- C語(yǔ)言中動(dòng)態(tài)內(nèi)存分配malloc、calloc和realloc函數(shù)解析
- c語(yǔ)言 malloc函數(shù)詳解
- 詳解C語(yǔ)言用malloc函數(shù)申請(qǐng)二維動(dòng)態(tài)數(shù)組的實(shí)例
- C語(yǔ)言基礎(chǔ)之malloc和free函數(shù)詳解
相關(guān)文章
Objective-C限制函數(shù)調(diào)用的頻率詳解
這篇文章主要給大家介紹了關(guān)于Objective-C限制函數(shù)調(diào)用的頻率的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12QT設(shè)置widget背景圖片不影響widget內(nèi)其他控件背景的方法
這篇文章主要給大家介紹了關(guān)于QT設(shè)置widget背景圖片不影響widget內(nèi)其他控件背景的方法,軟件的界面為了更直觀或美觀,常常需要通過(guò)圖片來(lái)表達(dá),需要的朋友可以參考下2023-06-06C++ Qt開(kāi)發(fā)之PushButton按鈕組件的使用詳解
Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,本文將重點(diǎn)介紹QPushButton按鈕組件的常用方法及靈活運(yùn)用,感興趣的小伙伴可以學(xué)習(xí)一下2023-12-12C語(yǔ)言實(shí)現(xiàn)輸入兩個(gè)數(shù)字將其按從小到大輸出的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸入兩個(gè)數(shù)字將其按從小到大輸出的方法,本文通過(guò)代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04C++中整形與浮點(diǎn)型如何在內(nèi)存中的存儲(chǔ)詳解
大家好!這期和大家分享整形和浮點(diǎn)型是如何在數(shù)據(jù)是如何在內(nèi)存中存儲(chǔ),下面文章具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05如何通過(guò)C++求出鏈表中環(huán)的入口結(jié)點(diǎn)
本文主要介紹了通過(guò)C++求解鏈表中環(huán)的入口結(jié)點(diǎn),即給一個(gè)長(zhǎng)度為n鏈表,若其中包含環(huán),請(qǐng)找出該鏈表的環(huán)的入口結(jié)點(diǎn),否則,返回null。需要的朋友可以參考一下2021-12-12