[C&C++] malloc()用法--動態記憶體配置函式 - 李山姆的部落格
文章推薦指數: 80 %
今日再練習LinkList資料結構時,看到了malloc()函式就研究一下current = (LNode *)malloc(sizeof(LNode)); //動態配置一LNode結構記憶體大小.
李山姆的部落格
跳到主文
歡迎光臨李山姆在痞客邦的小天地
部落格全站分類:職場甘苦
相簿
部落格
留言
名片
公告版位
May04Fri201207:01
[C&C++]malloc()用法--動態記憶體配置函式
今日再練習LinkList資料結構時,看到了malloc()函式就研究一下
current=(LNode*)malloc(sizeof(LNode));
//動態配置一LNode結構記憶體大小(Byte)並告知其為LNode的指標型態,把記憶體位置記錄在Current
#include
在這種狀況下,不能保證這幾次allocate到的記憶體會是連續的*/
current=current->rightNode;
}
current=head;
while(current!=NULL)
{
prev=current;
current=current->rightNode;
free(prev);
}
system("PAUSE");
return0;
}
重點一:syntax:void*malloc(size_tsize);輸入參數:所需記憶體大小,以byte來計算。
回傳結果:void*,故使用上必須告知此指標的資料型態或結構。
一般使用方式:(1)使用sizeof運算,來決定所需記憶體1個單位的結構大小。
ex:sizeof(double),會計算1個double所需的byte數。
sizeof裡也可放一個stucture。
(2)乘上所需的記憶體單位數。
ex:m*sizeof(double),會計算m個double所需byte數。
(3)將回傳指標轉換成所需指標ex:pDouble=(double*)malloc(m*sizeof(double)),會把所要求的m*sizeof(double)大小記憶體位置,轉換成double指標,放到pDouble中。
這個函數的目的,是為了要動態的要求一塊記憶體。
我們需要一個大小為16的char,可以用下面來達成:charword[16];但是如果要一個大小為n,這個值『不是固定數的記憶體大小』,則要靠malloc來達成:char*word=(char*)malloc(16*sizeof(char));程式中未知大小的記憶體需求,例如:一個計算班級平均成績的程式,先要求使用者輸入班級人數,接著輸入每個人的成績。
然而班級人數程式無法事先得知,要等使用者輸入之後才知,這時候就需要用『動態配置記憶體』,使記憶體大小隨著使用者輸入的人數而要求不同的大小。
同樣的狀況,使用靜態記憶體配置,配置50筆資料,如果使用者只需要20名,剩下的30個空間就是浪費的;如果使用者需要80名,這時候就不敷使用。
因此在未知大小的情況下,使用動態記憶體配置,是比較有效率的方式。
重點二:動態配置記憶體的優點
1.撰寫程式時程式設計者不需要限制程式所能處理的最多資料項目2.製作資料結構3.動態配置的記憶體其生命週期完全由程式設計者來控制
重點三:C程式執行時所有的資料變數置於三種區域
資料區(Datasegment)︰全域變數,static變數,常數。
堆疊區(Stack)︰區域變數(Autovariable),函式參數,暫時變數。
Heap區︰動態配置的記憶體。
所以,malloc()使用時是利用Heap區的記憶體來配置,且記憶體位置並沒有接續,是由OS來提供位置,這點必須強調。
全站熱搜
創作者介紹
李山姆'sBlog
李山姆的部落格
李山姆'sBlog發表在痞客邦留言(0)人氣()
E-mail轉寄
全站分類:進修深造個人分類:C,C++此分類上一篇:[C,C++]typedefstruct用法說明
上一篇:[分享好文]該如何學好"寫程式"?
下一篇:[Ubuntu]命令列(終端機視窗)在哪裡?!&如何安裝VMwareToolsbyUbuntu12.0版本
▲top
留言列表
禁止留言
最新文章
文章分類
生活隨筆(2)
胡言亂語(0)分享好文(2)
程式設計(3)
C,C++(2)C#(0)HTML(0)
伺服器相關(2)
Linux(1)MSServer(0)
POWEREDBY
(登入)
關閉視窗
延伸文章資訊
- 1malloc - cppreference.com
- 2malloc、free、calloc 與realloc - OpenHome.cc
malloc、free、calloc 與realloc ... 到目前為止,變數建立後會配置記憶體空間,這類資源是配置在記憶體的堆疊區(Stack),生命週期侷限於函式執行期間,也就是函式執行過...
- 3第二十章| 指標- malloc()、free()、calloc() 與realloc()
C語言教學,指標- malloc()、free()、calloc() 與realloc(),都是事先宣告好所要使用的變數,當程式開始執行時,這些變數就會自動被配置記憶體空間。
- 4[C&C++] malloc()用法--動態記憶體配置函式 - 李山姆的部落格
今日再練習LinkList資料結構時,看到了malloc()函式就研究一下current = (LNode *)malloc(sizeof(LNode)); //動態配置一LNode結構記憶體大小.
- 5C 库函数– malloc() | 菜鸟教程
C 库函数- malloc() C 标准库- <stdlib.h> 描述C 库函数void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。 声明下面是ma...