【C++】關(guān)于C++的堆棧及內(nèi)存泄漏
作者: 鄭曉 分類(lèi): 編程基礎(chǔ) 發(fā)布于: 2012-10-31 23:02 瀏覽:7,422 評(píng)論(4)
先來(lái)看一下指針,指針在c++中的功能是非常強(qiáng)大的,但它比較危險(xiǎn),因?yàn)橹羔樤试S執(zhí)行對(duì)計(jì)算機(jī)不友好的操作,例如,可以使用未經(jīng)初始化操作的指針來(lái)訪問(wèn)內(nèi)存或者是試圖去釋放同一個(gè)內(nèi)存塊兩次。初學(xué)者在通過(guò)學(xué)習(xí)實(shí)踐來(lái)習(xí)慣指針表示法和指針概念之前,指針是非常容易引起迷惑的。
在C++中,如果使用了new關(guān)鍵字(C++里好像叫操作符)在自由存儲(chǔ)空間或堆上創(chuàng)建變量之后 而沒(méi)有使用delete操作符的話,將會(huì)發(fā)生什么情況呢?
如果沒(méi)有調(diào)用delete操作符,則即使包含指針的內(nèi)存由于作用域規(guī)則和對(duì)象生命周期的原因而被釋放,在自由存儲(chǔ)空間上動(dòng)態(tài)分配的變量或結(jié)構(gòu)也將會(huì)繼續(xù)存在。實(shí)際上,由于指向這些內(nèi)存的指針失效,程序?qū)o(wú)法訪問(wèn)自由存儲(chǔ)空間中的結(jié)構(gòu),這種原因?qū)?huì)導(dǎo)致內(nèi)存泄漏。
被泄漏的內(nèi)存將在程序的整個(gè)生命周期內(nèi)都不可使用,這些內(nèi)存被分配出去,但無(wú)法收回。在一些極特殊的情況下,這種內(nèi)存泄漏的情況可能會(huì)非常地嚴(yán)重,以致于應(yīng)用程序的可用內(nèi)存被耗盡而導(dǎo)致程序崩潰。另外,這種內(nèi)存泄漏現(xiàn)象還會(huì)給一些操作系統(tǒng)或在相同的內(nèi)存空間中運(yùn)行的應(yīng)用程序帶來(lái)負(fù)面影響,甚至同樣崩潰。
不管是多牛的程序員還是軟件公司做出的軟件,都有可能出現(xiàn)內(nèi)存泄漏。養(yǎng)成一種好的習(xí)慣會(huì)盡可能的減少內(nèi)存泄漏問(wèn)題的發(fā)生,所以在使用自由存儲(chǔ)空間上動(dòng)態(tài)地分配內(nèi)存后要記得及時(shí)釋放它,對(duì)于new與delete操作符來(lái)說(shuō),要盡量注意同時(shí)使用。
本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國(guó)大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/about-c-stack-and-memory-leaks.html
好幾天不更新了。干嘛呢,,
正準(zhǔn)備更新呢。。。 ??