c語言malloc函數(shù)的用法示例和意義
當我們需要做一個成績管理系統(tǒng),人數(shù)可能為全校學(xué)生,也可能為一個班的學(xué)生,當我們開辟一個班的數(shù)組大小時,如果要存儲整個學(xué)校的人數(shù)時,會出現(xiàn)內(nèi)存不夠用的情況;當我們開辟全校人數(shù)大小的數(shù)組時,輸入一個班人數(shù)的大小時,會出現(xiàn)內(nèi)存浪費的情況。
為了應(yīng)對上述問題,我們引入malloc函數(shù)。
malloc時動態(tài)內(nèi)存分配函數(shù),用于申請一塊連續(xù)的指定大小的內(nèi)存塊區(qū)域以void*類型返回分配的內(nèi)存區(qū)域地址
malloc函數(shù)原型
extern void *malloc(unsigned int num_bytes);
意為分配長度為num_bytes字節(jié)的內(nèi)存塊
malloc函數(shù)頭文件
#include<malloc.h>
malloc函數(shù)返回值
如果分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。
malloc函數(shù)使用注意事項
malloc函數(shù)的返回的是無類型指針,在使用時一定要強制轉(zhuǎn)換為所需要的類型。
**(敲黑板)重點:在使用malloc開辟空間時,使用完成一定要釋放空間,如果不釋放會造內(nèi)存泄漏。
在使用malloc函數(shù)開辟的空間中,不要進行指針的移動,因為一旦移動之后可能出現(xiàn)申請的空間和釋放空間大小的不匹配
malloc函數(shù)使用形式
關(guān)于malloc所開辟空間類型:malloc只開辟空間,不進行類型檢查,只是在使用的時候進行類型的強轉(zhuǎn)。
舉個例子:‘我’開辟你所需要大小的字節(jié)大小空間,至于怎么使用是你的事
mallo函數(shù)返回的實際是一個無類型指針,必須在其前面加上指針類型強制轉(zhuǎn)換才可以使用
指針自身 = (指針類型*)malloc(sizeof(指針類型)*數(shù)據(jù)數(shù)量)
int *p = NULL; int n = 10; p = (int *)malloc(sizeof(int)*n);
在使用malloc函數(shù)之前我們一定要計算字節(jié)數(shù),malloc開辟的是用戶所需求的字節(jié)數(shù)大小的空間。
如果多次申請空間那么系統(tǒng)是如何做到空間的不重復(fù)使用呢?
在使用malloc開辟一段空間之后,系統(tǒng)會在這段空間之前做一個標記(0或1),當malloc函數(shù)開辟空間如果遇到標記為0就在此開辟,如果為1說明此空間正在被使用。
free函數(shù)
作用:釋放malloc(或calloc、realloc)函數(shù)給指針變量分配的內(nèi)存空間。
注意:使用后該指針變量一定要重新指向NULL,防止懸空指針(失效指針)出現(xiàn),有效規(guī)避錯誤操作。
int main()
{
int *p = (int *)malloc(sizeof(int));
*p = 100;
free(p);
p = NULL;
return 0;free函數(shù)在釋放空間之后,把內(nèi)存前的標志變?yōu)?,且為了防止數(shù)據(jù)泄露,它會把所釋放的空間用cd進行填充。
到此這篇關(guān)于c語言malloc函數(shù)的用法示例和意義的文章就介紹到這了,更多相關(guān)c語言malloc函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?Socket實現(xiàn)TCP與UDP網(wǎng)絡(luò)編程
本文主要介紹了C++?Socket實現(xiàn)TCP與UDP網(wǎng)絡(luò)編程,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
C++無鎖數(shù)據(jù)結(jié)構(gòu)實現(xiàn)示例詳解
這篇文章主要為大家介紹了C++無鎖數(shù)據(jù)結(jié)構(gòu)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
C++ COM編程之QueryInterface函數(shù)(二)
這篇文章主要介紹了C++ COM編程之QueryInterface函數(shù)(二),本文是第二篇,第一篇請參閱相關(guān)文檔,需要的朋友可以參考下2014-10-10

