動態分配記憶體函式及鍊錶的建立

2021-09-26 19:28:35 字數 1287 閱讀 6182

記憶體分配有靜態記憶體分配和動態記憶體分配兩種,靜態記憶體分配是在程式編譯的過程中已經確定了記憶體的大小,例如陣列,這種的缺點就是你靜態開闢的記憶體有時可能過大造成資源浪費,有時過小造成記憶體不足,下面先首先介紹下常見的動態記憶體分配函式(動態分配都在堆中):

(這些函式都需要標頭檔案#include或者#include編譯器的不同所導致)

1.malloc():

void * malloc(size),這個函式的引數是表示記憶體大小的 int 型size,返回值是void的型別的指標,一般需要強制轉換成目標結構體或者類的指標,會在堆中分配乙個長度為size的連續空間,事實上malloc分配的不止是size大小的空間,因為其內部還有頭部資訊(32)尾部資訊(4)這兩者,因此算的話就把這兩個加上就好了,具體不做深究,malloc()不會對分配的記憶體進行初始化,這就是它和calloc()的區別;一般都要和free()函式搭配;

2.free():

free()函式用於釋放動態分配的記憶體,引數為指向該記憶體首位址的指標,將指向記憶體的指標free掉後,要把這個指標指向「null」;

3.calloc():

用法和malloc()基本一直唯一的不同是calloc()會給分配的記憶體初始化為0;

4realloc():

引數有兩個,第乙個是已經分配記憶體的指標,第二個是要追加的記憶體大小,這個函式的返回值仍然是void指標,還是要強制轉換成指定型別的指標,注意再realloc後第乙個指標引數指的記憶體就已經被free了,取而代之的是追加後的記憶體所以在free只需要對第二個指標進行free就可以了。

鍊錶:

鍊錶的概念大致為,乙個類或者結構體中有資料元素和乙個該類的指標,作用是指向下乙個元素,你可以想象為乙個抽屜裡面有你想找的東西(資料)和乙個小紙條上面寫著你要的東西在那個抽屜裡,這樣連鎖起來;

鍊錶的基本建立和鍊錶的輸出:

#include #include #define null 0

#define size sizeof(struct student)

using namespace std;

struct student;

struct student * create(int n)

return (head);

}void show(struct student *p,int n)

}int main()

以上做法就優化的陣列的不足,這個動態鍊錶可以根據你想要的資料個數來動態的建立節點個數,沒有陣列那麼死板了。

補充c++空指標的定義:

#define null 0

常見動態分配記憶體分配函式

1.malloc函式的使用方法 void malloc unsigned size 其中size是指的分配記憶體的位元組 void malloc unsigned size 包含在庫函式 stdlib.h 中,作用是在記憶體的堆區分配乙個大小為size的連續空間,如果分配記憶體成功,函式返回新分配記...

c語言動態分配記憶體及記憶體分配部分函式

include 在c中動態分配記憶體的基本步驟有 1,用malloc類的函式分配記憶體 2,用這些記憶體支援應用程式 3,用free函式釋放記憶體 二 動態記憶體分配函式 malloc 從堆上分配記憶體 realloc 在之前分配的記憶體塊的基礎上,將記憶體重新分配為更大或者更小的部分 calloc...

順序表(動態分配記憶體

include 順序表 動態分配記憶體 2010 04 16 11 29 34 include include include include 用來清屏 using namespace std const int list size 1000 const int list size 10 typed...