第二十章| 指標- malloc()、free()、calloc() 與realloc()
文章推薦指數: 80 %
C語言教學,指標- malloc()、free()、calloc() 與realloc(),都是事先宣告好所要使用的變數,當程式開始執行時,這些變數就會自動被配置記憶體空間。
Thiswebsite
Archives
Categories
Tags
About
Donate
RSS
歡迎!您似乎正在使用廣告攔截器。
請考慮通過禁用您的廣告攔截器來支持我。
J.J.Huang
2019-10-24
C
瀏覽次數:次
{{moment(1571878800000).fromNow()}}
C語言-第二十章|指標-malloc()、free()、calloc()與realloc()
前置作業由於很多語法在C++裡面,很多的語法、型態、轉型⋯等等,都非常的嚴謹,而教材又有點年紀了。
將專案修改為C專案,請參考在VisualStudio2019中建立和執行C專案
刪除.cpp檔
新增項目Source.c
專案->屬性->C/C++->所有選項->尋找「編譯」->編譯成「編譯成C程式碼(/TC)」
什麼是malloc()、free()、calloc()與realloc()?到目前為止,都是事先宣告好所要使用的變數,當程式開始執行時,這些變數就會自動被配置記憶體空間。
然而有時有些變數並不知道何時會被使用,若希望在使用到的時候再配置空間給變數,並在變數不使用的時候,將變數所佔有的空間還給記憶體,這時候可以使用malloc()與free()函式。
1int*ptr=malloc(sizeof(int));
malloc()運算子會配置一個int需要的空間,並傳回該空間的位址,所以使用指標ptr來儲存這個位址,這段程式只配置空間但不初始空間中的儲存值。
12345678910111213141516171819#include
在這個程式中,雖然顯示完畢後程式也就結束,但這邊還是示範了free()的用法,而這也是個好習慣,日後程式在持續執行過程中,若大量使用malloc()而沒有適當地使用free()的話,由於空間一直沒有歸還,最後將導致整個記憶體空間用盡。
來看一個簡單的動態記憶體配置的應用,陣列使用的一個缺點,就是陣列的大小必須事先決定好,然而有時候無法知道要使用多大的陣列,或者希望由使用者自行決定陣列大小,這時候就可以使用動態記憶體配置,加上指標運算來解決這個問題,先說明陣列動態配置的方式。
1int*arr=malloc(1000*sizeof(int));
這段程式碼動態配置了1000個int大小的空間,並傳回空間的第一個位址,配置後的空間資料是未知的,可以使用calloc()來宣告空間配置。
1int*arr=calloc(1000,sizeof(int));
這個程式將宣告1000個int大小的空間,並將所有的空間值初始為0。
同樣地,使用malloc()或calloc()配置得來的空間,在不使用時應該使用free()釋放。
1free(arr);
1234567891011121314151617181920212223242526272829303132#include
延伸文章資訊
- 1c語言: 什麼時候必用malloc而不直接宣告陣列? - iT 邦幫忙
大家好,想問一個c語言的觀念問題, 什麼時候必用到malloc語法? 我知道malloc的語法, 譬如說要宣告一個5*4的int二維陣列, 我們可以這樣寫: int ...
- 2C/C++ malloc 用法與範例
本篇ShengYu 介紹C/C++ malloc 用法與範例,malloc 是用來配置一段記憶體區塊的函式,以下介紹如何使用malloc 函式。 C/C++ 可以使用malloc 來配置 ...
- 3[C&C++] malloc()用法--動態記憶體配置函式 - 李山姆的部落格
今日再練習LinkList資料結構時,看到了malloc()函式就研究一下current = (LNode *)malloc(sizeof(LNode)); //動態配置一LNode結構記憶體大小.
- 4malloc | Microsoft Docs
void *malloc( size_t size );. 參數. size 要配置的位元組。 傳回值. malloc 會傳回void 指標至配置的空間;如果沒有足夠的記憶體,則為 NULL 。
- 5第二十章| 指標- malloc()、free()、calloc() 與realloc()
C語言教學,指標- malloc()、free()、calloc() 與realloc(),都是事先宣告好所要使用的變數,當程式開始執行時,這些變數就會自動被配置記憶體空間。