3 回答

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
C不支持new/delete,C++支持new/delete
c中可用malloc和free
說(shuō)明:
1。char buffer[16*1024];
可以理解為函數(shù)Fun()被調(diào)用后創(chuàng)建了一小塊內(nèi)存,是局部變量,在堆棧中分配地址。函數(shù)結(jié)束就銷毀。
2。char* pbuffer = new BYTE[16*1024];
重點(diǎn)是它在堆中分配地址。相當(dāng)于你申請(qǐng)了一段全局變量的內(nèi)存塊,只要把地址指針傳出本函數(shù),別人也可調(diào)用。
而第一種方法是函數(shù)結(jié)束就銷毀,指針傳出去也沒(méi)有用,別人也用不了。
建議使用堆棧分配局域變量,用堆分配大塊內(nèi)存或者動(dòng)態(tài)創(chuàng)建對(duì)象。
測(cè)試如下:VC++6.0
char *ppp = NULL;
void CAaaaaDlg::OnButton1()
{
// TODO: Add your control notification handler code here
char* pbuffer = new char[16];
for (int i = 0; i < 16; i++)
{
*(pbuffer + i) = 'A' + i;
}
ppp = pbuffer;
}
void CAaaaaDlg::OnButton2()
{
// TODO: Add your control notification handler code here
char a[16];
for (int i = 0; i < 16; i++)
{
a[i] = *(ppp + i); //正確
}
free(ppp);
for (i = 0; i < 16; i++)
{
a[i] = *(ppp + i); //隨機(jī)值
}
}

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
C不支持new,C++支持new
使用new可以實(shí)現(xiàn)內(nèi)存回收,用完之后就delete掉。
第一種方法簡(jiǎn)單(這應(yīng)該不算一個(gè)優(yōu)點(diǎn)吧)
第二種方法靈活,而且16K內(nèi)存說(shuō)多不多,說(shuō)少不少。使用第二種方法更適合編寫高質(zhì)量高標(biāo)準(zhǔn)的軟件。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
第一種申請(qǐng)的內(nèi)存空間有作用域,所以可以在結(jié)束的時(shí)候由系統(tǒng)給你釋放,但是在運(yùn)行時(shí)就固定了大小了,不能更改.
第二種申請(qǐng)的空間沒(méi)有作用域,需要用delete手工釋放,如果沒(méi)有釋放就會(huì)造成內(nèi)存泄漏,但是在運(yùn)行時(shí)能隨時(shí)按所需要的數(shù)值申請(qǐng)內(nèi)存空間.
- 3 回答
- 0 關(guān)注
- 220 瀏覽
添加回答
舉報(bào)