我們知道,當(dāng)我們寫程序時(shí),棧區(qū)的內(nèi)存是非常小的,如果是寫那種大型的項(xiàng)目,不夠用是很正常的,所以我們需要在堆區(qū)申請內(nèi)存;
但是如果在堆區(qū)申請了大量的內(nèi)存,導(dǎo)致沒有空間了,那么程序就會崩潰,很煩人;我們做程序,想要的并不是崩潰,因?yàn)槌绦蛞坏┍罎⒕痛硎裁炊甲霾涣?;我們需要的是如果?nèi)存不足,程序不要崩潰掉,返回一個(gè)錯(cuò)誤或者空地址就行了,我們根據(jù)返回值在來進(jìn)行不同的操作;這就要用到std::nothrow了
以我自己的電腦為例,先在棧區(qū)分配內(nèi)存:
先在棧區(qū)申請10 0000*4字節(jié)的內(nèi)存,運(yùn)行一下,程序正常,并沒有崩潰
加大申請空間100 0000*4 看看是否會崩潰掉:
程序出現(xiàn)了異常;
那么我們換一種方式,在堆區(qū)申請:
沒有問題,那么加大申請空間到1000 0000*4 :
還是沒有崩潰,那么繼續(xù):
因?yàn)槎褏^(qū)內(nèi)存空間與計(jì)算機(jī)的物理內(nèi)存有關(guān),大家計(jì)算機(jī)申請的大值可能不一樣,我這里到5 0000 0000*4就崩潰了,如下:
這里需要注意,彈出如下窗口,或者程序退出代碼不為0才叫程序崩潰:
如果你連編譯都通過不了,那不叫崩潰,那是語法出錯(cuò)了;程序運(yùn)行死掉了才叫崩潰,編譯都通過不了,肯定是語法問題,如下:
申請了太多了編譯是無法通過的;
大家注意,申請堆區(qū)空間需要編譯通過、循行卡死才能使用我們的std::nothrow?
我這里申請到5 0000 0000*4字節(jié)的時(shí)候編譯能通過,但是一運(yùn)行就死掉了,很煩
我們可以使用std::nothrow
在new后面加std::nothrow意思就是,如果空間不足,返回nullptr,程序不會崩潰,如下:
可以看到,沒有崩潰,那么我們就可以根據(jù)返回值,進(jìn)行業(yè)務(wù)處理了,如下:
這樣就達(dá)到我們的目的了,程序也沒有崩潰掉;
關(guān)于std::nothrow的知識就總結(jié)到這里了,感謝觀看!?
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:C++std::nothrow-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://chinadenli.net/article48/dgjdhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、云服務(wù)器、網(wǎng)站營銷、軟件開發(fā)、品牌網(wǎng)站設(shè)計(jì)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容