C语言学习:malloc()函数
函數(shù)聲明:
void *malloc(size_t size)頭文件:
#include <stdio.h>函數(shù)描述:
- 分配所需的內(nèi)存空間,并返回一個(gè)指向它的指針。
參數(shù):
- size – 內(nèi)存塊的大小,以字節(jié)為單位。
返回值:
- 該函數(shù)返回一個(gè)指針 ,指向已分配大小的內(nèi)存。如果請(qǐng)求失敗,則返回 NULL。
實(shí)例:
下面的實(shí)例演示了 malloc() 函數(shù)的用法。
#include <stdio.h> #include <stdlib.h>void update_value(int* p){*p = 100; }int main() {//在棧上面分配變量a 占4個(gè)字節(jié)int a = 10;//申請(qǐng)類型是int內(nèi)存空間;占4個(gè)字節(jié);p指針指向該4個(gè)字節(jié)的內(nèi)存空間 int *p = (int*)malloc(sizeof(int));//p變量也占4字節(jié);所以sizeof(p)=8個(gè)字節(jié)//賦值p只指向的動(dòng)態(tài)空間為50*p = 50;printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));free(p);//修改p指向的內(nèi)存中的數(shù)據(jù)printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));update_value(p);printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));return(0); }注:當(dāng)內(nèi)存不再使用的時(shí)候,應(yīng)使用free()函數(shù)將內(nèi)存塊釋放掉。
void*:表示未確定類型的指針,C/C++規(guī)定void*可以強(qiáng)轉(zhuǎn)為任何其他類型的指針,關(guān)于void還有一種說法就是其他任何類型都可以直接賦值給它,無需進(jìn)行強(qiáng)轉(zhuǎn),但是反過來不可以。
malloc:分配的內(nèi)存大小至少為參數(shù)所指定的字節(jié)數(shù)。
malloc的返回值是一個(gè)指針,指向一段可用內(nèi)存的起始位置,指向一段可用內(nèi)存的起始地址,多次調(diào)用malloc所分配的地址不能有重疊部分,除非某次malloc所分配的地址被釋放掉malloc應(yīng)該盡快完成內(nèi)存分配并返回(不能使用NP-hard的內(nèi)存分配算法)實(shí)現(xiàn)malloc時(shí)應(yīng)同時(shí)實(shí)現(xiàn)內(nèi)存大小調(diào)整和內(nèi)存釋放函數(shù)(realloc和free)
malloc和free是配對(duì)的,如果申請(qǐng)后不釋放就是內(nèi)存泄露,如果無故釋放那就是什么也沒做,釋放只能釋放一次,如果一塊空間釋放兩次或者兩次以上會(huì)出現(xiàn)錯(cuò)誤(但是釋放空指針例外,釋放空指針也等于什么也沒做,所以釋放多少次都是可以的。)
總結(jié)
以上是生活随笔為你收集整理的C语言学习:malloc()函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江苏银行美团信用卡提额快吗?一文带你快速
- 下一篇: 南京银行京东金融联名卡审核要多久?可以这