當(dāng)前位置:博客首頁(yè)>>編程基礎(chǔ) >> 閱讀正文

【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

【C++】關(guān)于C++的堆棧及內(nèi)存泄漏:目前有4 條留言

用戶評(píng)論頭像 蔡佳博客發(fā)表于 2012年11月09日 20:38[回復(fù)]

好幾天不更新了。干嘛呢,,

    用戶評(píng)論頭像 鄭曉發(fā)表于 2012年11月09日 22:36[回復(fù)]

    正準(zhǔn)備更新呢。。。 ??

用戶評(píng)論頭像 happmaoo發(fā)表于 2012年11月03日 18:59[回復(fù)]

c++不熟悉,c#懂一點(diǎn),現(xiàn)在學(xué)java,不去折騰了

    用戶評(píng)論頭像 鄭曉發(fā)表于 2012年11月03日 19:01[回復(fù)]

    我也是只會(huì)一點(diǎn)兒php,C以前上學(xué)時(shí)沒(méi)怎么認(rèn)真學(xué),現(xiàn)在感覺(jué)好難啊。。

發(fā)表評(píng)論

change vcode