本篇ShengYu 介紹C/C++ malloc 用法與範例,malloc 是用來配置一段記憶體區塊的函式,以下介紹如何使用malloc 函式。
C/C++ 可以使用malloc 來配置 ...
2021-10-11
C/C++教學
本篇ShengYu介紹C/C++malloc用法與範例,malloc是用來配置一段記憶體區塊的函式,以下介紹如何使用malloc函式。
C/C++可以使用malloc來配置一段記憶體區塊,要使用malloc的話需要引入的標頭檔,如果要使用C++的標頭檔則是引入,malloc函式原型為1void*malloc(size_tsize);
malloc()配置sizebytes的記憶體區塊,會回傳一個指向該記憶體開頭的指標,這些記憶體的內容是尚未被初始化的,也就是說裡面目前存放的數值是未知的,如果配置失敗的話會回傳nullpointer(NULL),配置成功的話會回傳void*指標,void*指標能被轉成任何一種類型的指標,來看看下面的malloc用法範例吧!
使用malloc配置20bytes記憶體大小的區塊,回傳的ptr檢查一下是不是NULL,之後使用strcpy()複製字串到ptr裡並印出來,使用完ptr後別忘記了要使用free()歸還記憶體區塊。
cpp-malloc.cpp12345678910111213141516171819//g++cpp-malloc.cpp-oa.out#include#include#includeintmain(){char*ptr;ptr=(char*)malloc(sizeof(char)*20);if(ptr==NULL){printf("mallocfailed\n");exit(1);}strcpy(ptr,"HelloWorld");printf("%s\n",ptr);free(ptr);return0;}
結果如下,1HelloWorld
mallocint一維陣列這邊示範動態記憶體配置一個int一維陣列的寫法,123int*p=(int*)malloc(sizeof(int)*3);...free(p);
如果要分成兩行寫的話,1234int*p;p=(int*)malloc(sizeof(int)*3);...free(p);
再來看看怎麼配置一維陣列後,再給初始值,cpp-malloc2.cpp123456789101112131415//g++cpp-malloc2.cpp-oa.out#include#includeintmain(){int*p=(int*)malloc(sizeof(int)*3);p[0]=1;p[1]=2;p[2]=3;printf("%d,%d,%d\n",p[0],p[1],p[2]);free(p);return0;}
輸出如下,11,2,3
mallocint二維陣列動態配置二維陣列這個通常會在影像處理中使用到這個技巧,假設我們要配置3*4大小的int二維陣列,注意在使用完該變數後還是要將其變數free歸還記憶體,二維陣列怎麼malloc的,free時就怎麼free。
cpp-malloc3.cpp123456789101112131415161718192021222324252627282930//g++cpp-malloc3.cpp-oa.out#include#includeintmain(){int**p=(int**)malloc(sizeof(int*)*3);for(inti=0;i<3;i++){p[i]=(int*)malloc(sizeof(int)*4);for(intj=0;j<4;j++){p[i][j]=0;}}p[0][1]=1;p[1][1]=2;p[2][1]=3;for(inti=0;i<3;i++){for(intj=0;j<4;j++){printf("%d",p[i][j]);}printf("\n");}for(inti=0;i<3;i++){free(p[i]);}free(p);return0;}
二維陣列輸出結果如下,123010002000300
如果要在記憶體分配的同時初始化成0的話可以改用calloc,就不用像上面用malloc完後一一去初始化,這也是malloc與calloc的差異,malloc分配記憶體時是不初始化的,calloc分配記憶體的同時也初始化成0,cpp-malloc4.cpp123456789101112131415161718192021222324252627//g++cpp-malloc4.cpp-oa.out#include#includeintmain(){int**p=(int**)malloc(sizeof(int*)*3);for(inti=0;i<3;i++){p[i]=(int*)calloc(4,sizeof(int));}p[0][1]=1;p[1][1]=2;p[2][1]=3;for(inti=0;i<3;i++){for(intj=0;j<4;j++){printf("%d",p[i][j]);}printf("\n");}for(inti=0;i<3;i++){free(p[i]);}free(p);return0;}
以上就是C/C++malloc的用法與範例介紹,如果你覺得我的文章寫得不錯、對你有幫助的話記得Facebook按讚支持一下!
其它參考malloc-C++Referencehttps://www.cplusplus.com/reference/cstdlib/malloc/
其它相關文章推薦如果你想學習C++相關技術,可以參考看看下面的文章,C/C++新手入門教學懶人包
Newer
C/C++rename用法與範例
Older
C/C++memcpy用法與範例
精選文章
Python基礎教學目錄
C/C++入門教學目錄
Linux常用指令教學懶人包
最新文章
gdbserver遠端除錯教學
gdb除錯教學
Ubuntu使用VSCodeDebugger除錯教學
Androidadbforward通訊埠轉發用法教學
macOS使用VSCodeDebugger除錯教學
粉絲專頁
分類
Arduino4C/C++教學139Github13Git教學19OpenCV教學8Projects6Python教學224Qt教學7
首頁
Python教學
C/C++教學
歸檔
標籤
Projects
關於我