c 動態記憶體分配

2021-06-18 19:28:36 字數 602 閱讀 1407

c語言中提供的動態記憶體分配為了解決陣列的靜態的分配方式的問題:即陣列大小必須在定義時指定,程式在執行時不能動態改變陣列的大小 。

在標準庫中提供了三個動態記憶體分配的函式供程式呼叫,下面將分別對這三個函式進行介紹:

1.  void *malloc(size_t size)

malloc 在分配一段連續的記憶體時,不會初始化該記憶體區並且返回指向該段記憶體區的首位址,當記憶體分配失敗時返回null;通常我們在成功分配記憶體後在使用前要使用memset來初始化該記憶體區。

2.void * calloc(size_t n,size_t size)

該函式在動態儲存區(堆)中分配n個長度為size的連續儲存空間,並且對該段連續的記憶體空間初始化成0,如果分配失敗則返回null,成功則返回指向首位址的空間。

3. void *realloc(void *ptr, size_t size)

該函式重新分配記憶體空間的大小,當ptr指向的區域空間足夠時,則直接返回ptr的指標,若ptr指向的空間區域不夠時,則新分配size個大小的空間,並將ptr指向的記憶體資料內容拷貝到新的空間,同時返回新的首位址,當ptr == null時,該函式相當於malloc。當size == 0時,則等同於free(ptr);

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

C 動態記憶體分配

c 動態記憶體分配 c c 定義了4個記憶體區間 區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆 heap 區或自由儲存區 free store 堆的概念 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確...

C動態記憶體分配

主要初步介紹malloc free calloc realloc的基本。日後會有更詳細的內容。malloc free分別用於動態記憶體分配和釋放。malloc會從記憶體池裡提取一塊合適的記憶體 連續的 並返回指向這塊記憶體 起始位置的指標,該指標的型別為void 指標 因為malloc不知道你請求的...