屬于內(nèi)存管理的兩個函數(shù),malloc是申請內(nèi)存的,free是釋放內(nèi)存的。
創(chuàng)新互聯(lián)建站專注于隆子網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供隆子營銷型網(wǎng)站建設(shè),隆子網(wǎng)站制作、隆子網(wǎng)頁設(shè)計、隆子網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造隆子網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供隆子網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1、malloc一般用法:
int *t=NULL;
t=(int *)malloc(sizeof(int));
也可以在sizeof前面加上一個'n*'這就成了一個動態(tài)分配數(shù)組的方法。
2、free一般用法:
int *t=NULL;
t=(int *)malloc(sizeof(int));
free(t);
這樣t所指的空間就被釋放掉了。
擴展資料:
malloc函數(shù)定義
其函數(shù)原型為void *malloc(unsigned int size);其作用是在內(nèi)存的動態(tài)存儲區(qū)中分配一個長度為size的連續(xù)空間。此函數(shù)的返回值是分配區(qū)域的起始地址,或者說,此函數(shù)是一個指針型函數(shù),返回的指針指向該分配域的開頭位置。
如果分配成功則返回指向被分配內(nèi)存的指針(此存儲區(qū)中的初始值不確定),否則返回空指針NULL。當(dāng)內(nèi)存不再使用時,應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。
參考資料來源:百度百科-malloc函數(shù)
參考資料來源:百度百科-free()
都是通過系統(tǒng)API函數(shù)向系統(tǒng)申請的
#include stdio.h
#include malloc.h
void main()
{int a=10;
int p*;//定義了一個整數(shù)類型的指針
p=malloc(sizeof(int)*a);//分配40個字節(jié)的內(nèi)存空間
*p=5;
*(p+1)=6; //將分配的內(nèi)存空間的前兩個整數(shù)賦值為5和6
free(p); //使用完之后釋放內(nèi)存空間
}
但在某些時候,我們需要的數(shù)組的長度是無法預(yù)先確定的,要解決這樣的限制,需要使用動態(tài)數(shù)組。動態(tài)數(shù)組是相對于靜態(tài)數(shù)組而言。動態(tài)數(shù)組的內(nèi)存空間是從堆(heap)上分配的,是在執(zhí)行代碼過程中分配的,當(dāng)程序執(zhí)行到這些語句時,才為其分配。注意,程序員自己負責(zé)釋放內(nèi)存。
1
2
#includestdio.h
#includestdlib.h
int main(int arcv, char * argv[])
{
int arrLen;
char *array;
char c;
int i;
printf("please set the size of the len:\n");
scanf("%d", arrLen);
array = (char *)malloc(arrLen*sizeof(char));
if(array == NULL)
{
printf("malloc fail\n");
return -1;
}
for(i = 0; i arrLen;i++)
{
c = getchar();
array[i] =c;//*array++ =c;
}
for( i = 0; i arrLen; i++)
{
printf("this array is %c\n", array[i]);
}
free(array);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mallco和free成對出現(xiàn),在用完申請的內(nèi)存之后及時釋放,否則會造成內(nèi)存泄漏。
我們在一些項目中經(jīng)常出現(xiàn)內(nèi)存泄漏
malloc(sizeof)是C語言,是向系統(tǒng)申請內(nèi)存空間的函數(shù)。
sizeof一般用于獲取字符串的長度,是處理字符串的重要工具。
同時,sizeof在數(shù)據(jù)結(jié)構(gòu)這門課中是創(chuàng)建結(jié)點必要的命令。
例:*head=(node*)malloc(sizeof(node)); [注]node為結(jié)構(gòu)體。
sizeof(node)表示獲取node類型的長度,malloc(sizeof(node))表示在內(nèi)存中申請一個node長度的空間。
關(guān)于C語言:
C語言是一門面向過程的、抽象化的通用程序設(shè)計語言,廣泛應(yīng)用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。
C語言是僅產(chǎn)生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設(shè)計語言。盡管C語言提供了許多低級處理的功能,但仍然保持著跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業(yè)平臺的許多計算機平臺上進行編譯。