malloc()是C語言裡面動態宣告記憶體位置的函式

malloc()這個函式是在 stdlib.h 裡面提供的

其宣告的型態是 

 

void *malloc( size_t size);

 

因為電腦不知道要如何用你借來的記憶體

所以型態是 void *

所以要使用的時候要轉成你要的型態

 

其需要一個參數:size

以下是他在C library的定義

Size of the memory block, in bytes.

意即其以BYTES(位元組)為單位

malloc會回傳兩種結果

  1. NULL,電腦沒有空間可以借你
  2. 不是NULL,回傳分配好的記憶體位置給你
以下是分配一維陣列的範例
 
int *a;
a=(int*)malloc(m*sizeof(int));
 

則 a 為一個 m 大小的陣列

之後使用的方法就跟一般陣列一樣

 

那假如要宣告一個二維陣列呢?

(假設要宣告一個 m x n 的陣列)

int **a,*b;
int m,n;
a=(int**)malloc(m*sizeof(int*)) ;
b=(int*)malloc(m*n*sizeof(int));
for(i=0;i<m;i++,b+=n)
a[i]=b;

要釋放記憶體的時候只需釋放 a 和 a[0] 即可

 

而要怎麼調整已宣告的記憶體的大小呢~?

就需要用到 realloc() 這個函式

其宣告的型態是

void * realloc ( void * ptr, size_t size );

ptr是指向之前已經宣告好的記憶體位置

ptr若是null,其功能就如同malloc()

size則是"調整之後的記憶體大小"

 

realloc()的做法是在新的位置宣告好記憶體位置後

把ptr裡的東西都複製到新的記憶體位置

然後回傳新的記憶體位置

 

realloc()的回傳有兩種情況

  1. NULL,則指向ptr的位置
  2. 非NULL,則指向新宣告的位置

 

以下為realloc的範例

(假設a為一個已經malloc好的陣列,m為想要宣告的大小)

a=(int*)realloc(a,sizeof(int)*m);

 

 

 

 

創作者介紹
創作者 隨性筆記-記錄生活的點滴 的頭像
CFWei0111

隨性筆記-記錄生活的點滴

CFWei0111 發表在 痞客邦 留言(0) 人氣( 21045 )