1 基本語法
動態分配記憶體有兩種方式:
① malloc申請記憶體+free釋放記憶體:
標頭檔案:#include
用法示例:char* p=(char*) malloc(84);
含義:申請能存放84個char型別資料的空間,也就是說,開闢一塊84位元組的記憶體空間,p為指向這塊空間的指標。
通用的方法為:
object* p=(object*)malloc(sizeof(object));
其中,object可以是c或c++本來就定義好的型別,也可以是自己定義的型別。
free可以釋放malloc開闢的記憶體,不是malloc開闢的記憶體無法通過free釋放。
free(p);
② new申請記憶體+delete釋放記憶體
標頭檔案:不需要
用法示例:
string* sp=new
string("a value"); //分配並初始化乙個string物件
string* arr=new
string[10]; //分配10個預設初始化的string物件
通用的方法為:
object* p2=new
object;
開闢乙個存放object的儲存空間。
object* p2=new
object(data);
開闢乙個存放object的空間,並指定初值為data。
其中,object可以是c或c++本來就定義好的型別,也可以是自己定義的型別。
用delete釋放空間:
delete p2;
2 處理陣列
① 用malloc和free建立和釋放多維陣列的空間
參考資料:
給二維陣列(m*n)分配空間:
char **a, i; // 先分配m個指標單元,注意是指標單元,所以每個單元的大小是sizeof(char *)
a = (char **)malloc(m * sizeof(char *)); // 再分配n個字元單元,上面的m個指標單元指向這n個字元單元首位址
for(i = 0; i < m; i++) a[i] = (char *)malloc(n * sizeof(char));
釋放:
int i;
for(i=0;ifree((void *)a[i]);
free((void *)a);
為三維陣列(m*n*p)分配空間:
char ***a, i, j;
a = (char ***)malloc(m * sizeof(char **));
for(i = 0; i < m; ++i) a[i] = (char **)malloc(n * sizeof(char *));
for(i = 0; i < m; ++i)
for(j = 0; j < n; ++j)
a[i][j] = (char *)malloc(p * sizeof(char));
釋放:
int i,j,;
for(i = 0; i
< m; ++i)
for(j = 0; j
< n; ++j)
free((void *)a[i]
[j]);
for(i = 0; i
< m; ++i)
free((void *)a[i]);
free((void *)a);
② 用new和delete建立和釋放多維陣列的空間
參考資料:
一維陣列動態記憶體的建立:
int *array1d;
array1d = new
int [m];
釋放:
delete array1d;
二維陣列動態記憶體的建立:
int **array2d;
//假定陣列第一維長度為m, 第二維長度為n
//動態分配空間
array2d = new
int *[m];
for( int i=0; inew
int [n] ;
釋放:
for( int i=0; i
i++ )
delete array2d;
事實上二維陣列空間的釋放還可以更簡單地用:delete array2d;
三維陣列動態記憶體的建立:
int ***array3d;
//假定陣列第一維為m, 第二維為n, 第三維為h
//動態分配空間
array3d = new
int **[m];
for( int i=0; inew
int *[n];
for( int j=0; jnew
int [h];
}}
釋放
for( int i=0; ifor( int j=0; jdelete array3d[i][j];
}delete array3d[i];
}delete array3d;
C語言動態分配記憶體
動態開闢記憶體的函式 void malloc size t size 這個函式向記憶體申請 塊連續可 的空間,並返回指向這塊空間的指標 如果開闢成功,則返回 個指向開闢好空間的指標 如果開闢失敗,則返回 個null指標,因此malloc的返回值 定要做檢查 返回值的型別是 void 所以malloc...
C 動態分配 C 的記憶體模型
c 程式語言有3種不同型別的變數 全域性變數,區域性 動態分配變數。變數的值儲存在計算機的主存中,但是變數儲存的方式取決於變數的型別。3種型別的變數分別對應儲存器中的3個特定的區域 1.全域性變數儲放在儲存器中的固定位置 2.區域性變數存放在執行時棧上 3.動態分配變數存放在堆上 全域性變數的宣告在...
C語言動態分配記憶體知識
陣列的長度必須事先指定,只能是常整數,不能是變數 傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義 該陣列的函式使用完畢後,釋放陣列占用的記憶體。陣列的長度一旦定義,其長度就不能更改。傳統形式定義的陣列不能跨函式使用。動態記憶體分配可以很好的解決傳統陣列的缺點。傳統陣列也被稱之為...