-
動態內存分配
鎖定
- 中文名
- 動態內存分配
- 所屬學科
- 信息科學
- 定 義
- 動態地分配或回收存儲空間的方法
動態內存分配C語言函數
C語言允許建立內存動態分配區域,以存放一些臨時用的數據,這些數據不必在程序的聲明部分定義,也不必等到函數結束時才釋放,而是需要時隨時開闢,不需要時隨時釋放。C語言中,內存的動態分配是通過系統提供的庫函數來實現的,主要有malloc、calloc和 free 函數。
動態內存分配malloc 函數
其函數原型為
void *malloc(unsigned int size);
其作用是在內存的動態存儲區中分配一個長度為size的連續空間。此函數的返回值是分配區域的起始地址,或者説,此函數是一個指針型函數,返回的指針指向該分配域的開頭位置。如:
malloc(100);/*開闢 100 個字節的臨時分配域,返回值為其第一個字節的地址*/
注意指針的基類型為 void,即不指向任何類型的數據,只提供一個地址。如果此函數未能成功的執行(例如內存空間不足),則返回空指針(NULL)。
動態內存分配calloc函數
函數原型為
void *calloc(unsigned n, unsigned size)
其作用是在內存的動態存儲區中分配n個長度為 size 的連續空間。函數返回一個指向分配區域的起始位置的指針;如果分配不成功,則返回NULL。
採用 calloc 函數可以為一維數組開闢動態存儲空間,n 為數組元素個數,每個元素長度為 size,這就是動態數組。如:
p = calloc(50,4) /*開闢 50*4個字節的臨時分配域,把起始地址賦給指針變量p */
動態內存分配free 函數
函數原型為
void free(void*p);
其作用是釋放指針 p 所指向的動態空間,使這部分空間能被其他變量使用。p 是最近一次調用 calloc 或malloc 函數時的返回值。free函數無返回值。如:
free(p); /*釋放指針變量p指向的已分配的動態空間*/
動態內存分配函數運算符
動態內存分配new
運算符new用於向系統申請動態存儲空間,並把首地址作為運算結果,它的使用形式為:
指針變量=new 數據類型;
例如:
int *p=new int
該語句的作用是會用new從內存中申請了一個int型變量(4個字節),並將該變量的首地址賦給指針變量p。
new所建立的變量的初始值是任意的,也可在用new分配內存的同時進行初始化。使用形式為:
指針變量=new 數據類型(初始值)。
動態內存分配delete
堆內存可按照要求進行分配,程序對內存的需求量隨時會發生變化,有時程序在運行種可能會不再需要由new分配的內存空間,而且程序還未運行結束,這時就需要把先前佔用的內存空間釋放給堆內存,以後重新分配,供程序的其他部分使用。運算符delete用於釋放new分配的內存空間,刪除建立的對象,它的使用形式為:
delete 指針變量;