内存资源的申请与释放(CC++)
生活随笔
收集整理的這篇文章主要介紹了
内存资源的申请与释放(CC++)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在嵌入式系統(tǒng)中動態(tài)內(nèi)存申請存在比一般系統(tǒng)編程時更嚴格的要求,這是因為嵌入式系統(tǒng)的內(nèi)存空間往往是十分有限的,不經(jīng)意的內(nèi)存泄露會很快導致系統(tǒng)的崩潰。
所以一定要保證你的malloc和free成對出現(xiàn),如果你寫出這樣的一段程序:
char * function(void)
{
char *p;
p = (char *)malloc(…);
if(p==NULL)
…;
… /* 一系列針對p的操作 */
return p;
}
在某處調(diào)用function(),用完function中動態(tài)申請的內(nèi)存后將其free,如下:
char *q = function();
…
free(q);
上述代碼明顯是不合理的,因為違反了malloc和free成對出現(xiàn)的原則,即"誰申請,就由誰釋放"原則。不滿足這個原則,會導致代碼的耦合度增大,因為用戶在調(diào)用function函數(shù)時需要知道其內(nèi)部細節(jié)!
正確的做法是在調(diào)用處申請內(nèi)存,并傳入function函數(shù),如下:
char *p=malloc(…);
if(p==NULL)
…;
function(p);
…
free(p);
p=NULL;
而函數(shù)function則接收參數(shù)p,如下:
void function(char *p)
{
… /* 一系列針對p的操作 */
} 在上位機編程中,亦應如此。
所以一定要保證你的malloc和free成對出現(xiàn),如果你寫出這樣的一段程序:
char * function(void)
{
char *p;
p = (char *)malloc(…);
if(p==NULL)
…;
… /* 一系列針對p的操作 */
return p;
}
在某處調(diào)用function(),用完function中動態(tài)申請的內(nèi)存后將其free,如下:
char *q = function();
…
free(q);
上述代碼明顯是不合理的,因為違反了malloc和free成對出現(xiàn)的原則,即"誰申請,就由誰釋放"原則。不滿足這個原則,會導致代碼的耦合度增大,因為用戶在調(diào)用function函數(shù)時需要知道其內(nèi)部細節(jié)!
正確的做法是在調(diào)用處申請內(nèi)存,并傳入function函數(shù),如下:
char *p=malloc(…);
if(p==NULL)
…;
function(p);
…
free(p);
p=NULL;
而函數(shù)function則接收參數(shù)p,如下:
void function(char *p)
{
… /* 一系列針對p的操作 */
} 在上位機編程中,亦應如此。
總結
以上是生活随笔為你收集整理的内存资源的申请与释放(CC++)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞鸽传书官方网站方式hook一些常见的枚
- 下一篇: 获得磁盘的飞鸽传书描述信息