使用malloc函數或new運算符為鏈表結點分配記憶體空間

  • 2019 年 10 月 18 日
  • 筆記

使用malloc函數或new運算符為鏈表結點分配記憶體空間

當我們定義鏈表結點類型後,如何在每次需要使用新結點時臨時分配相應大小的記憶體空間給新結點,本文介紹兩種方法,即C語言中的malloc函數與C++中的new運算符。

1.malloc函數

malloc函數是C語言中stdlib.h頭文件下用於申請動態記憶體的函數,其返回類型是申請的同變數類型的指針,基本用法。

typename* p=(typename*)malloc(sizeof(typename));

以申請一個int型變數和一個node型結構體變數比例:

int* p=(int)malloc(sizeof(int));  node* p=(node)malloc(sizeof(node));

​ 這個寫法的邏輯是:以需要申請的記憶體空間大小(即sizeof(node))為malloc函數的參數,這樣malloc函數就會向記憶體申請一塊大小為sizeof(node)的空間,並且返回指向這塊空間的指針。但是此時這個指針是一個未確定類型的指針void*,因此需要把它強制轉換為node型的指針,因此在malloc之前加上(node *)。這樣等號右邊就得到一個node 型指針,並通過賦值等號把這個指針賦給node ,就成功申請了一塊node類型大小的記憶體空間,即一個node 型的結構體變數,並通過指針p來訪問它。如果申請失敗,則會返回空指針NULL。失敗一般發生在使用malloc申請了較大的動態數組,即

int *p=(int*)malloc(1000000 * sizeof(int));  //這樣malloc會返回空指針並賦值給p。因此只要是正常分配一個結點的空間,是不會失敗的。

2.new運算符