C 語言動態記憶體配置教學:malloc、free 等函數 - GT Wang

文章推薦指數: 80 %
投票人數:10人

這是使用 malloc 與 free 配置一維動態陣列的例子。

#include #include int main() { // 用來管理動態記憶體的指標 int *dynArr ... Blogger舊站 關於 Facebook Flickr 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 C語言動態記憶體配置教學:malloc、free等函數 2017/03/07 0則留言 本文將介紹與C語言動態記憶體配置有關的各種函數及其使用方式,包含malloc、calloc、free與realloc函數。

C語言的動態記憶體配置可以讓程式在需要使用到大量的記憶體時,動態的取得更多的記憶體空間,在使用完之後也可以將不再需要使用的記憶體釋出,也就是說它可以讓程式設計者自行管理記憶體的使用。

C語言動態記憶體配置的相關函數位於stdlib.h這個C語言的標準函式庫中,以下是主要的幾個函數: void*malloc(size_tsize); void*calloc(size_tnmemb,size_tsize); voidfree(void*ptr); void*realloc(void*ptr,size_tsize); 這幾個函數的功用如下: malloc函數 malloc代表memoryallocation,用來配置指定大小的記憶體空間,傳回新空間第一個位元組的記憶體位址,配置的空間處於尚未初始化的狀態。

calloc函數 calloc代表contiguousallocation,用來配置陣列用的記憶體空間,傳回新空間第一個位元組的記憶體位址,配置的空間會被初始化為0。

free函數 釋放之前使用malloc或calloc函數所配置的記憶體空間。

realloc函數 改變已配置記憶體空間的大小。

這些函數的詳細說明,可以參考malloc(3)的manpage: man3malloc 以下是一些C語言配置與管理記憶體的範例程式碼。

典型記憶體配置 C語言中最常被使用的記憶體管理方式就是使用malloc配置記憶體,並配合free來釋放記憶體。

一維陣列 這是使用malloc與free配置一維動態陣列的例子。

#include #include intmain(){ //用來管理動態記憶體的指標 int*dynArr; //指定空間大小 intarrLen=10; //取得記憶體空間 dynArr=malloc(arrLen*sizeof(int)); if(dynArr==NULL){ //無法取得記憶體空間 fprintf(stderr,"Error:unabletoallocaterequiredmemory\n"); return1; } //使用動態取得的記憶體空間 inti; for(i=0;i #include intmain(){ int*dynArr; //指定空間大小 intarrLen1=10; intarrLen2=5; //取得記憶體空間 dynArr=malloc(arrLen1*arrLen2*sizeof(int)); if(dynArr==NULL){ fprintf(stderr,"Error:unabletoallocaterequiredmemory\n"); return1; } //使用動態取得的記憶體空間 inti,j; for(i=0;i #include #include intmain(){ int*dynArr; intarrLen=10; //配置記憶體,並初始化 dynArr=calloc(arrLen,sizeof(int)); if(dynArr==NULL){ fprintf(stderr,"Error:unabletoallocaterequiredmemory\n"); return1; } inti; for(i=0;i #include #include intmain(){ int*dynArr; intarrLen=10; //配置未初始化的記憶體空間 dynArr=malloc(arrLen*sizeof(int)); if(dynArr==NULL){ fprintf(stderr,"Error:unabletoallocaterequiredmemory\n"); return1; } //將記憶體初始化為0 memset(dynArr,0,arrLen*sizeof(int)); inti; for(i=0;i #include intmain(){ int*dynArr; intarrLen=10; //取得記憶體空間 dynArr=malloc(arrLen*sizeof(int)); if(dynArr==NULL){ fprintf(stderr,"Error:unabletoallocaterequiredmemory\n"); return1; } //擴充記憶體空間 arrLen=20; dynArr=realloc(dynArr,arrLen*sizeof(int)); //確認有正常取得調整後的空間 if(dynArr==NULL){ fprintf(stderr,"Error:unabletoallocaterequiredmemory\n"); return1; } //使用動態取得的記憶體空間 inti; for(i=0;i #include intmain(){ int*ptr=(int*)malloc(16); //釋放記憶體,等同於free(ptr) realloc(ptr,0); return0; } 參考資料:GeeksforGeeks、Programiz、tutorialspoint 程式設計 C/C++ G.T.Wang 個人使用Linux經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

LeaveaReply取消回覆 留言* Name* Email* Website 搜尋 分類Arduino(5) BeagleBoneBlack(1) DIY(54) Linux(317) macOS(33) Octave(15) Perl(12) R(47) Windows(98) WordPress(16) 個人(15) 免費(35) 兒童(30) 實用工具(85) 手機(13) 技巧(45) 有趣(99) 樹莓派(57) 物聯網(55) 玄學(11) 生活(209) 程式設計(137) 統計學(8) 網頁空間(36) 網頁開發(128) 虛擬化(7) 農業(42) 遊戲(9) 開箱(132) 雲端(4) 宗教 如何戒邪淫、遠離婚外情 戒淫寶典:《壽康寶鑑》白話有聲書 公益 智邦公益網 台灣世界展望會 Yahoo奇摩公益 igiving公益網 家扶基金會 ©2022G.T.Wang



請為這篇文章評分?