您好,登錄后才能下訂單哦!
c語言動態內存分配
主要初步介紹malloc、calloc、realloc、free的基本用法。都是標準的庫函數,在stdlib.h庫內。
malloc、free
分別用于動態內存分配和釋放
,調用形式: (類型說明符*) malloc (size) ,“類型說明符”表示把該區域用于何種數據類型。(類型說明符*)表示把返回值強制轉換為該類型指針,malloc分配的內存是位于堆上的,并且沒有初始化內存的內容。malloc動態開辟一塊長度為size字節的連續區域,size為需要內存空間的長度,返回該區域的首地址。用malloc分配存儲空間時,必須由我們計算需要的字節數。如果想要分配10個int型的空間,那就是說需要10*sizeof(int)的內存空間。malloc分配的內存空間也有缺點,如果由malloc函數分配的內存空間原來沒有被使用過,則其中的每一位都有可能是0,反之,如果這部分內存曾經被分配過,則其中可能遺留各種各樣的數據。也就是說,使用malloc()函數分配內存時可能會出現問題。
int *p = (int *)malloc(10*sizeof(int));///分配完內存沒有初始化
calloc 也用于分配內存空間。調用形式: (類型說明符*)calloc(n,size) ,在內存動態存儲區中分配n塊長度為“size”字節的連續區域。函數的返回值為該區域的首地址。(類型說明符*)用于強制類型轉換。calloc函數與malloc 函數的區別僅在于一次可以分配n塊區域。 colloc與malloc類似,但是主要的區別是存儲在已分配的內存空間中的值默認為0,使用malloc時,已分配的內存中可以是任意的值. colloc需要兩個參數,第一個是需要分配內存的變量的個數,第二個是每個變量的大小.
int *q = (int *)calloc(5,sizeof(int)); //calloc = malloc + memset//分配完內存自動初始化
realloc(p,5*sizeof(char));更改已經配置的內存空間,即更改由malloc()函數分配的內存空間的大小.如果重新分配成功則返回指向被分配內存的指針,否則返回空指針NULL。 當內存不再使用時,應使用free()函數將內存塊釋放。
注意:這里原始內存中的數據還是保持不變的。
*p = realloc(p,5*sizeof(char));//修改malloc分配內存大小
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。