大家好,想問一個c語言的觀念問題,
什麼時候必用到malloc語法?
我知道malloc的語法,
譬如說要宣告一個5*4的int
二維陣列,
我們可以這樣寫:
int **Array;
Array = (int**)malloc(5*sizeof(int*));
for(int i=0;i<5;i++)
{
Array[i]=(int*)malloc(4*sizeof(int));
}
但是要宣告一個5*4的int
二維陣列,
我們可以簡單寫int Array[5][4];
就好,
比用malloc的語法簡單很多
有沒有什麼情境,
是用malloc動態宣告陣列比直接宣告一個固定大小陣列恰當的例子呢?
謝謝~
這兩個不知道是不是你想要的?
如果一開始我們就宣告陣列的大小,如果我們沒用那麼多的話就浪費,如果用太多、超過的話又會造成 runtime error,怎麼辦呢?這就是為什麼要使用動態記憶體的原因了,因為動態配置陣列,可以隨心所欲的控制陣列的元素個數。這篇暫以指標動態配置一維陣列為例。
https://edisonshih.pixnet.net/blog/post/27974938
....................................................
多維動態陣列在 C 中 大概只能用 malloc,但這在一維時尚不構成問題,但需要多維陣列時怎麼辦呢?這算是程式論壇最常被問到的問題之一了。
例如你寫一個掃描某個目錄底下檔案的函數,因為數量不定,你可能會使用Linked List資料結構,
搭配使用malloc.
當然要使用固定的Array 也未嘗不可,只要你把機制處理好,但是這時候要去維持這個機制(例如計數器,還有判斷式),看哪邊成本(執行成本或是維護成本)可以自行取捨.
也沒有絕對哪種好啦.
有時候耍帥也是一種追求.
現在很多都有幫你寫好了,
譬如C++的vector等等的,
C#的List之類的,
要全部自己寫是很痛苦的...
尤其對於初學者來說很容易出問題.
通常我們不確定陣列會多大,
譬如說使用者輸入一個大小之後才建立陣列,
或是檔案讀進來之後才知道大小,
就會需要用到malloc,
但是你動態配置之後,
如果用不到了就要釋放,
要不然就會造成所謂的memory leak,
而導致最後可能程式會Crash或其他問題...