C語言記憶體管理 動態記憶體分配

2021-10-22 06:02:37 字數 1374 閱讀 9828

一、介紹

一般定義陣列是要給固定的長度,當我們不知道輸入的長度是多少的時候,怎麼辦

例如:需求現在有乙個**本儲存,**本中聯絡人並不知道有多少,一次定義1000個長度會占用記憶體,定義太小又會導致儲存不夠

c語音給了一種特殊的方式,動態記憶體分配

二、函式介紹

標頭檔案#include

1、void *malloc(int num);

在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的

2、void calloc(int num, int size);

在記憶體中動態地分配 num 個長度為 size 的連續空間,並將每乙個位元組都初始化為 0。所以它的結果是分配了 numsize 個位元組長度的記憶體空間,並且每個位元組的值都是0

3、void *realloc(void *address, int newsize);

該函式重新分配記憶體,把記憶體擴充套件到 newsize

4、void free(void *address);

該函式釋放 address 所指向的記憶體塊,釋放的是動態分配的記憶體空間

三、使用說明

動態分配記憶體,記憶體的**是ram,準確說是ram中的堆記憶體,硬體上外拓sdram或者ddr的平台,軟體上一般是上作業系統的平台

使用步驟:

1、動態分配記憶體

2、指標對映記憶體

3、使用

4、釋放

注意:用完一定要釋放記憶體,不然會造成記憶體洩漏

四、示例

1、函式使用

#include

#include

#include

intmain()

else

printf

("name = %s\n"

, name )

;printf

("description: %s\n"

, description )

;}

2、工程例項

以**本為例

常規陣列操作

typdef struct

tel_def;

tel_def contact[

1000]=

;

動態記憶體分配操作

typdef struct

tel_def;

tel_def *contact[

1000]=

;//使用的時候

contact[0]

=(tel_def *

)malloc

(sizeof

(tel_def )

);

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

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

C語言的記憶體管理 動態記憶體分配

c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名 記憶體分配由編譯器在編譯期間決定 定義陣列的時候必須指定陣列長度 陣列長度是在編譯器就必須確定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free用於執行動態記憶體分配和釋放 malloc所分配的是一塊連...

C語言動態記憶體分配

c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...