**:
主要初步介紹malloc、free、calloc、realloc的基本。日後會有更詳細的內容。
malloc、free分別用於動態記憶體分配和釋放。
malloc會從記憶體池裡提取一塊合適的記憶體(連續的),並返回指向這塊記憶體(起始位置的指標,該指標的型別為void*指標(因為malloc不知道你請求的記憶體需要儲存的資料型別),而且這塊記憶體並沒有初始化。
如果作業系統無法提供給malloc足夠的記憶體,malloc就會返回乙個null指標。因此必須對每個從malloc返回的指標進行檢查。
1 #include
2 #include 34
int main() 5
1516for(i =
0; i !=
25; i++)
17 pi[i] = i; 18
19for(i =
0; i !=
25; i++)
20 printf(
"%d
", pi[i]);
21 printf(
"\n");
2223
return
0;
24}calloc也可以用於記憶體分配,但是返回指向記憶體的指標之前會初始化為0。而且calloc和malloc請求記憶體數量的方式也不一樣。
realloc用於修改乙個原先已經分配的記憶體大小。ps:若原來的記憶體塊無法改變大小,realloc將分配另一塊正確的小的記憶體,並把原來的那塊記憶體的內容複製到新的記憶體塊。
free函式的引數為乙個先前從malloc、calloc、realloc返回的值。對null指標不會產生任何效果。
動態記憶體分配最常見的錯誤是忘記檢查請求的記憶體是否分配成功。
《c與指標》裡面提供了乙個程式可以減少錯誤的記憶體分配器。
**如下:
1 #include 23
#define malloc
//用於防止由於其他**塊直接塞入程式而導致偶爾直接呼叫malloc
4#define malloc(num, type) (type *)alloc((num) * sizeof(type))
//接受元素的數目和型別,呼叫alloc函式獲得記憶體,alloc呼叫malloc並進行檢查,確保返回的指標不是null 5
extern
void
*alloc( size_t size );
1 #include
2 #include
"alloc.h"3
#undef malloc 4
5void *alloc( size_t size ) 6
17return new_mem;
18} 1
#include
2 #include
"alloc.h"3
4int main()
5
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
c 動態記憶體分配
c語言中提供的動態記憶體分配為了解決陣列的靜態的分配方式的問題 即陣列大小必須在定義時指定,程式在執行時不能動態改變陣列的大小 在標準庫中提供了三個動態記憶體分配的函式供程式呼叫,下面將分別對這三個函式進行介紹 1.void malloc size t size malloc 在分配一段連續的記憶體...
C 動態記憶體分配
c 動態記憶體分配 c c 定義了4個記憶體區間 區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆 heap 區或自由儲存區 free store 堆的概念 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確...