c 使用malloc來做記憶體分配建立鍊錶

2021-10-01 05:18:41 字數 830 閱讀 7665

c++中建立鍊錶可以直接通過new物件的方式建立節點,然後將節點之間的關係通過next指標來關聯起來,另外,也可以通過malloc來分配記憶體,建立節點。這裡介紹如何通過malloc來建立鍊錶。

malloc分配記憶體的方式為malloc(sizeof(typename)),最後 還需要通過型別轉換,將它轉為(typename *),如下所示:

node *p=null;

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

下面給出乙個**示例,我們通過**來建立乙個鍊錶,使用乙個迴圈依次為鍊錶的節點賦值:

#include using namespace std;

#define size sizeof(node)

struct node;

node *create()else

} return head;

}void display(node *head)

cout執行**,列印如下:

這個**有個地方需要注意,很容易忽視的,就是當我們通過malloc分配了記憶體,預設節點是有預設值的,我們需要將data設定為我們需要設定的值,而且next也必須設定為null,如果next不設定,編譯不會報錯,但是執行會報錯,如下所示:

執行程式報錯: 

這裡也容易理解,因為next有值,所以在while(head!=null)判斷時會進入,但是當獲取data值的時候就報錯了。

C 使用new來分配記憶體

對位址的工作方式有一定了解後,來看看它如何實現在程式執行時分配記憶體。前面我們都將指標初始化為變數的位址 變數是在編譯時分配的有名稱的記憶體,而指標只是為可以用過名稱直接訪問的記憶體提供了乙個別名。指標真正的用武之地在於,在執行階段分配未命名的記憶體以儲存值。在這種情況下,只能通過指標來訪問。在c語...

對malloc分配的資源做記憶體對齊

記憶體對齊效能原因 資料結構 尤其是棧 應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問 而對齊的記憶體訪問僅需要一次訪問。個人的一點說明 在c c 中,使用malloc 動態分配的記憶體是隨機的,如果要對分配的這段記憶體運算比較頻繁,可能有效能上的問題,同...

malloc記憶體分配原理

一 malloc的工作機制 它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二 一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組 接下來,將分配給使用者的那塊記憶體傳給...