九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
C++學(xué)習(xí)——?jiǎng)討B(tài)內(nèi)存分配

文章目錄

何為靜態(tài)內(nèi)存分配?

通常定義變量(或?qū)ο?#xff09;,編譯器在編譯時(shí)可以根據(jù)該變量(或?qū)ο?#xff09;的類型知道所需內(nèi)存空間的大小,從而系統(tǒng)在適當(dāng)?shù)臅r(shí)候事先為他們分配確定的存儲(chǔ)空間。這種內(nèi)存分配稱為靜態(tài)存儲(chǔ)分配;
這種內(nèi)存分配的方法存在比較嚴(yán)重的缺陷。

為什么需要?jiǎng)討B(tài)內(nèi)存分配

在使用數(shù)組的時(shí)候(線性擬合),總有一個(gè)問(wèn)題困擾著我們:數(shù)組應(yīng)該有多大?在很多的情況下,你并不能事先確定數(shù)組的大小。

  • 定義大了:空間浪費(fèi)
  • 定義小了:不夠用,可能引起下標(biāo)越界錯(cuò)誤,
  • 即使正好:如果因?yàn)槟撤N特殊原因空間利用的大小有增加或者減少(增加點(diǎn)或減少點(diǎn)),你又必須重新去修改程序,擴(kuò)大數(shù)組的存儲(chǔ)范圍。

解決方法:動(dòng)態(tài)內(nèi)存分配

C/C++定義了4個(gè)內(nèi)存區(qū)間:代碼區(qū),全局變量與靜態(tài)變量區(qū),局部變量區(qū)即棧區(qū)(stack),動(dòng)態(tài)存儲(chǔ)區(qū),(堆heap區(qū)或自由存儲(chǔ)區(qū)free store)。
動(dòng)態(tài)內(nèi)存分配技術(shù)可以保證 程序在運(yùn)行過(guò)程中,按照實(shí)際需要申請(qǐng)適量的內(nèi)存,使用結(jié)束后還可以釋放;
這種在程序運(yùn)行過(guò)程中申請(qǐng)和釋放的的存儲(chǔ)單元也稱為堆對(duì)象,申請(qǐng)和釋放的過(guò)程一般稱為建立(New)和刪除(delete)。
所有動(dòng)態(tài)存儲(chǔ)分配都在堆區(qū)中進(jìn)行。

動(dòng)態(tài)申請(qǐng)內(nèi)存操作符 new

new 類型名T(初始化參數(shù)列表)

功能:在程序執(zhí)行期間,申請(qǐng)用于存放T類型對(duì)象的內(nèi)存空間,并依初值列表賦以初值。
結(jié)果

  • 成功:T類型的指針,指向新分配的內(nèi)存并
    返回該內(nèi)存區(qū)域的首地址;
  • 失敗:拋出異常。

釋放內(nèi)存操作符delete

delete 指針名p

**功能:**釋放指針p所指向的內(nèi)存。
p必須是new操作的返回值。

注意問(wèn)題

  1. 初始化問(wèn)題
    標(biāo)準(zhǔn)數(shù)據(jù)類型:
       int *point; 
       point=new int(2);

C++比C中多了類的概念,
建立對(duì)象時(shí),要調(diào)用類的構(gòu)造函數(shù);
刪除對(duì)象時(shí),要調(diào)用類的析構(gòu)函數(shù)。

  1. 內(nèi)存泄露問(wèn)題
    用new分配的內(nèi)存,必須要用delete釋放!
    否則,會(huì)導(dǎo)致分配的內(nèi)存無(wú)法收回,使得程序占據(jù)的內(nèi)存越來(lái)越大。

  2. 用new分配的內(nèi)存,能且僅能用一次delete釋放

內(nèi)存泄露舉例

下例中delete p; 是錯(cuò)誤的 ,要用delete []p才行

int * p = new int[88]; 
delete p;  //這里就內(nèi)存泄露了,要用delete []p才行
int function(int num)
{
         int *p = new[44];
         if( num > 111)
             return 0;
          delete []p;   
    return 1;
}

申請(qǐng)和釋放動(dòng)態(tài)數(shù)組

分配:new 類型名T [數(shù)組長(zhǎng)度 ]
數(shù)組長(zhǎng)度可以是任何表達(dá)式,在運(yùn)行時(shí)計(jì)算
釋放:delete [] 數(shù)組名p
釋放指針p所指向的數(shù)組。
p必須是用new分配得到的數(shù)組首地址。

動(dòng)態(tài)創(chuàng)建多維數(shù)組

new 類型名T[第1維長(zhǎng)度][第2維長(zhǎng)度]…;
如果內(nèi)存申請(qǐng)成功,new運(yùn)算返回一個(gè)指向新分配內(nèi)存首地址的指針,是一個(gè)T類型的數(shù)組,數(shù)組元素的個(gè)數(shù)為除最左邊一維外各維下標(biāo)表達(dá)式的乘積。

錯(cuò)誤示例:
例如:動(dòng)態(tài)創(chuàng)建一個(gè)2行3列的動(dòng)態(tài)數(shù)組:

char  *fp;
fp = new char[2][3];

正確實(shí)例:

char (*fp)[3];
fp = new char[2][3];

動(dòng)態(tài)生成二維數(shù)組還可以這樣子

int **a = new int*[n];
    for(int i = 0; i < n; i++)
        a[i] = new int[m];
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
3.4 動(dòng)態(tài)內(nèi)存分配 (Dynamic memory)
C++中堆和棧以及相關(guān)
C++ 動(dòng)態(tài)內(nèi)存
c++動(dòng)態(tài)內(nèi)存分配
delete與delete [] 真正區(qū)別
c++中new和delete的使用方法
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服