亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++堆內存空間詳解(釋放內存、內存泄露)

2020-05-23 14:27:05
字體:
來源:轉載
供稿:網友
家里要來客人了,我們要給客人們泡茶。如果規定只能在確定來幾位客人之前就把茶泡好,這就會顯得很尷尬:茶泡多了會造成浪費,泡少了怕怠慢了客人。所以,最好的方法就是等知道了來幾位客人再泡茶,來幾位客人就泡幾杯茶。

然而,我們在使用數組的時候也會面臨這種尷尬:數組的存儲空間必須在程序運行前申請,即數組的大小在編譯前必須是已知的常量表達式??臻g申請得太大會造成浪費,空間申請得太小會造成數據溢出而使得程序異常。所以,為了解決這個問題,我們需要能夠在程序運行時根據實際情況申請內存空間。

在C++中,允許我們在程序運行時根據自己的需要申請一定的內存空間,我們把它稱為堆內存(Heap)空間。

如何獲得堆內存空間

我們用操作符new來申請堆內存空間,其語法格式為:
    new 數據類型[表達式];
其中,表達式可以是一個整型正常量,也可以是一個有確定值的整型正變量,其作用類似聲明數組時的元素個數,所以兩旁的中括號不可省略。如果我們只申請一個變量的空間,則該表達式可以被省略,即寫作:
    new 數據類型;

使用new操作符后,會返回一個對應數據類型的指針,該指針指向了空間的首元素。所以,我們在使用new操作符之前需要聲明一個對應類型的指針,來接受它的返回值。如下面程序段:
int *iptr;//聲明一個指針
int size;//聲明整型變量,用于輸入申請空間的大小
cin >>size;//輸入一個正整數
iptr=new int[size];//申請堆內存空間,接受new的返回值

我們又知道,數組名和指向數組首元素的指針是等價的。所以,對于iptr我們可以認為是一個整型數組。于是,我們實現了在程序運行時,根據實際情況來申請內存空間。

釋放內存

當一個程序運行完畢之后,它所使用的數據就不再需要。由于內存是有限的,所以它原來占據的內存空間也應該釋放給別的程序使用。對于普通變量和數組,在程序結束運行以后,系統會自動將它們的空間回收。然而對于我們自己分配的堆內存空間,大多數系統都不會將它們回收。如果我們不人為地對它們進行回收,只“借”不“還”,那么系統資源就會枯竭,電腦的運行速度就會越來越慢,直至整個系統崩潰。我們把這種只申請空間不釋放空間的情況稱為內存泄露(Memory Leak)。

確認申請的堆內存空間不再使用后,我們用delete操作符來釋放堆內存空間,其語法格式為:
    delete [] 指向堆內存首元素的指針;
如果申請的是一個堆內存變量,則delete后的[]可以省略;如果申請的是一個堆內存數組,則該[]不能省略,否則還是會出現內存泄露。另外,我們也不難發現,delete后的指針就是通過new獲得的指針,如果該指針的數據被修改或丟失,也可能造成內存泄露。

下面我們來看一段程序,實踐堆內存的申請和回收:(程序8.7)
#include "iostream.h"
int main()
{
   int size;
   float sum=0;
   int *heapArray;
   cout <<"請輸入元素個數:";
   cin >>size;
   heapArray=new int[size];
   cout <<"請輸入各元素:" <<endl;
   for (int i=0;i<size;i++)
   {
      cin >>heapArray[i];
      sum=sum+heapArray[i];
   }
   cout <<"這些數的平均值為" <<sum/size <<endl;
   delete [] heapArray;
   return 0;
}

運行結果:
請輸入元素個數:5
請輸入各元素:
1 3 4 6 8
這些數的平均值為4.4
可見,申請的堆內存數組在使用上和一般的數組并無差異。我們需要記住的是,申請了資源用完了就一定要釋放,這是程序員的好習慣,也是一種責任。

那么,我們能不能來申請一個二維的堆內存數組呢?事實上,new 數據類型[表達式][表達式]的寫法是不允許的。所以,如果有需要,最簡單的方法就是用一個一維數組來代替一個二維數組。這就是上一章最后一小段文字的意義所在。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩一级裸体免费视频| 国产精品aaaa| 欧美性生交xxxxxdddd| 97超碰国产精品女人人人爽| 欧美视频13p| 亚洲精品97久久| 亚洲自拍欧美另类| 亚洲sss综合天堂久久| 红桃av永久久久| 国产精品亚洲精品| 久久免费视频在线| 亚洲视频欧洲视频| 国产精品流白浆视频| 国产综合在线视频| 尤物九九久久国产精品的分类| 日av在线播放中文不卡| 中文字幕日韩欧美精品在线观看| 精品偷拍各种wc美女嘘嘘| 欧美乱妇高清无乱码| 日韩欧亚中文在线| 国产在线98福利播放视频| 欧美色视频日本版| 成人久久久久爱| 欧洲成人免费aa| 国内精久久久久久久久久人| 姬川优奈aav一区二区| 欧美夫妻性视频| 亚洲小视频在线观看| 亚洲人成网站在线播| 国产精品久在线观看| 狠狠躁天天躁日日躁欧美| 欧美激情免费视频| 国产精品中文久久久久久久| 日本精品久久中文字幕佐佐木| 久久精品久久久久| 91九色单男在线观看| 亚洲国产精品久久91精品| 精品国产91久久久久久| 青青草国产精品一区二区| 欧美做爰性生交视频| 国产日韩中文字幕| 欧美成aaa人片免费看| 日韩av最新在线观看| 日韩在线观看精品| 亚洲精品欧美极品| 青青青国产精品一区二区| 欧美又大粗又爽又黄大片视频| 日韩视频在线一区| 欧洲精品毛片网站| 亚洲欧美激情在线视频| 亚洲天堂网在线观看| 国产999精品视频| 宅男66日本亚洲欧美视频| 91久久在线播放| 精品自在线视频| 狠狠色狠狠色综合日日小说| 欧美中文字幕在线| 国产91色在线播放| 日韩av电影手机在线观看| 久久天堂av综合合色| 国产91对白在线播放| 欧美大成色www永久网站婷| 日韩精品免费在线播放| 久久天天躁狠狠躁老女人| 亚洲精品福利视频| 97视频色精品| 狠狠久久五月精品中文字幕| 国产精品一区二区电影| 伊人av综合网| 国产成人在线亚洲欧美| 亚洲精品之草原avav久久| 成人久久18免费网站图片| 中文字幕精品av| 日韩精品免费在线播放| 国产91成人video| 高清亚洲成在人网站天堂| 欧美在线影院在线视频| 97视频在线观看视频免费视频| 亚洲国产精品人人爽夜夜爽| 日韩免费观看在线观看| 亚洲深夜福利视频| 亚洲丁香久久久| 亚洲欧美自拍一区| 欧美精品亚州精品| 91久久嫩草影院一区二区| 欲色天天网综合久久| 精品国产一区二区三区在线观看| 国产一区二区在线免费视频| 中文字幕亚洲国产| 欧美激情xxxxx| 3344国产精品免费看| 久久精品视频在线观看| 疯狂做受xxxx高潮欧美日本| 亚洲精品www| 在线视频中文亚洲| 色综合天天综合网国产成人网| 亚洲色图在线观看| 懂色av一区二区三区| 亚洲第一级黄色片| 欧美亚洲免费电影| 中文字幕一精品亚洲无线一区| 国产精品中文久久久久久久| 亚洲欧美精品suv| 久久久91精品| 日韩av在线网址| 奇米4444一区二区三区| 91久久夜色精品国产网站| 亚洲a级在线播放观看| 亚洲丁香久久久| 亚洲欧美综合另类中字| 欧美超级乱淫片喷水| 亚洲免费影视第一页| 国产精品美女主播在线观看纯欲| www.日韩.com| 国自产精品手机在线观看视频| 国产精品久久不能| 国产一区视频在线播放| 中文字幕精品国产| 欧美激情亚洲视频| 亚洲精品日韩在线| 45www国产精品网站| 亚洲在线第一页| 国产视频观看一区| 91在线视频成人| 国精产品一区一区三区有限在线| 亚洲国产欧美一区二区丝袜黑人| 日韩免费av在线| 97久久精品在线| 激情久久av一区av二区av三区| 亚洲片在线资源| 日韩有码在线视频| 亚洲人av在线影院| 亚洲国产精品小视频| 日韩一区二区三区在线播放| 日韩电影在线观看永久视频免费网站| 国产精品wwwwww| 国产亚洲欧洲在线| 久久精品电影网站| 国产亚洲精品久久久优势| 中文字幕在线国产精品| 日韩一区二区在线视频| 国产成人精品av| 欧美一级片久久久久久久| 久久91亚洲精品中文字幕奶水| 欧美性视频精品| 国产精品国模在线| 136fldh精品导航福利| 国产日韩欧美影视| 热久久美女精品天天吊色| 久久久久久欧美| 国产精品一区二区在线| 亚洲а∨天堂久久精品喷水| 久久精品国产免费观看| 精品日韩美女的视频高清| 国产成人精品一区| 日韩欧美中文免费| 亚洲а∨天堂久久精品9966| 亚洲高清不卡av| 日韩一区二区福利| 亚洲激情视频网站| 久久亚洲欧美日韩精品专区| 国产欧美日韩综合精品| 久热99视频在线观看| 亚洲午夜国产成人av电影男同|