3 回答

TA貢獻2080條經驗 獲得超4個贊
C不支持new/delete,C++支持new/delete
c中可用malloc和free
說明:
1。char buffer[16*1024];
可以理解為函數Fun()被調用后創建了一小塊內存,是局部變量,在堆棧中分配地址。函數結束就銷毀。
2。char* pbuffer = new BYTE[16*1024];
重點是它在堆中分配地址。相當于你申請了一段全局變量的內存塊,只要把地址指針傳出本函數,別人也可調用。
而第一種方法是函數結束就銷毀,指針傳出去也沒有用,別人也用不了。
建議使用堆棧分配局域變量,用堆分配大塊內存或者動態創建對象。
測試如下: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); //隨機值
}
}

TA貢獻1786條經驗 獲得超11個贊
C不支持new,C++支持new
使用new可以實現內存回收,用完之后就delete掉。
第一種方法簡單(這應該不算一個優點吧)
第二種方法靈活,而且16K內存說多不多,說少不少。使用第二種方法更適合編寫高質量高標準的軟件。

TA貢獻1818條經驗 獲得超11個贊
第一種申請的內存空間有作用域,所以可以在結束的時候由系統給你釋放,但是在運行時就固定了大小了,不能更改.
第二種申請的空間沒有作用域,需要用delete手工釋放,如果沒有釋放就會造成內存泄漏,但是在運行時能隨時按所需要的數值申請內存空間.
- 3 回答
- 0 關注
- 214 瀏覽
添加回答
舉報