C++ - 動(dòng)態(tài)內(nèi)存分配

有時(shí)候一個(gè)程序需要很大的內(nèi)存,有時(shí)需要很小的空間,比較有效率的做法就是動(dòng)態(tài)內(nèi)存分配。


用 new 運(yùn)算符實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配

  • 第一種用法,分配一個(gè)變量:
    P = new T;
    T 是任意類型名,P 是類型為*** T * 的指針。
    動(dòng)態(tài)分配出一片大小為 sizeof(T)字節(jié)的內(nèi)存空間,并且將該內(nèi)存空間的
    起始地址***賦值給 P。比如:
int * pn;
pn = new int;
*pn = 5;
  • 分配一個(gè)數(shù)組
    P = new T[N];
    T: 任意類型名
    P:可I型為 T* 的指針
    N:要分配的數(shù)組元素的個(gè)數(shù),可以是整型表達(dá)式
    動(dòng)態(tài)分配除一篇大小為 N*sizeof(T)字節(jié)的存儲空間
int *pn;
int i = 5;
pn = new int[i*20];
pn[0] = 20;
pn[100] = 30;//編譯沒問題。運(yùn)行時(shí)會導(dǎo)致數(shù)組越界
  • new 運(yùn)算符返回值類型:
    new T;
    new T[n];
    這兩個(gè)表達(dá)式返回值的類型都是 *** T * ***
    int *p = new int;

  • 用“new”動(dòng)態(tài)分配的內(nèi)存空間,一定要“delete”運(yùn)算符進(jìn)行釋放
    delete 指針:該指針必須指向 new 出來的空間

int *p = new int ;
*p =5;
delete p;
delete p;//導(dǎo)致異常,一片空間不能被 delete 多次
  • 用“delete”釋放動(dòng)態(tài)分配的數(shù)組,要加“[]”
    delete[] 指針://該指針必須指向 new 出來的數(shù)組
int *p = new int[20];
p[0] = 1;
delete[] p;

如果分配的空間沒有被回收就會成為程序的垃圾碎片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. malloc()函數(shù) 1.1 malloc的全稱是memory allocation,中文叫動(dòng)態(tài)內(nèi)存分配。 ...
    Pitfalls閱讀 2,135評論 0 5
  • 我學(xué)C++數(shù)組的起初,想到能不能在“編譯時(shí)數(shù)組元素是可以變化,運(yùn)行時(shí)才確定元素個(gè)數(shù)”的這一問題。于是我開始看書,上...
    Lucky寧閱讀 524評論 0 0
  • (JG-2014-08-20)(前半部分經(jīng)過網(wǎng)上多篇文章對比整理)(后半部分根據(jù)ExceptionalCpp、C+...
    JasonGao閱讀 5,742評論 2 23
  • C語言中內(nèi)存分配 在任何程序設(shè)計(jì)環(huán)境及語言中,內(nèi)存管理都十分重要。在目前的計(jì)算機(jī)系統(tǒng)或嵌入式系統(tǒng)中,內(nèi)存資源仍然是...
    一生信仰閱讀 1,313評論 0 2
  • 《七步掌握業(yè)務(wù)分析》作者是BABOK創(chuàng)作委員會的核心成員,所以這本書基本上是以BABOK為基礎(chǔ)的,感覺應(yīng)該說是從實(shí)...
    盧禮瑾EWBOK閱讀 2,894評論 0 5

友情鏈接更多精彩內(nèi)容