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函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二 一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組 接下來,將分配給使用者的那塊記憶體傳給...