国产色诱美女免费视频|欧美精彩狠狠色丁香婷婷|91黑人|日本黄色小视频|欧美一级黄色视频在这里免费观看

IT培訓(xùn)-高端面授IT培訓(xùn)機構(gòu)
云和教育:云和數(shù)據(jù)集團高端IT職業(yè)教育品牌
  • 國家級
    全民數(shù)字素養(yǎng)與技能培訓(xùn)基地
  • 河南省
    第一批產(chǎn)教融合型企業(yè)建設(shè)培育單位
  • 鄭州市
    數(shù)字技能人才(碼農(nóng))培養(yǎng)評價聯(lián)盟

初學(xué)者必看:C++常見錯誤及解決方法

  • 發(fā)布時間:
    2019-05-27
  • 版權(quán)所有:
    云和教育
  • 分享:

C++程序作為一種計算機語言,具有功能豐富等優(yōu)點,廣泛應(yīng)用于工業(yè)軟件研發(fā)當中,不僅具有很高的開發(fā)價值,而且研究價值也很高。

配圖1 C++常見錯誤及解決方法.jpg

有利就會有弊,其程序同時具有概念復(fù)雜的缺點,對于初學(xué)者來說經(jīng)常出現(xiàn)錯誤,令其茫然失措,會使學(xué)習的信心受到挫傷。因此加深對常見錯誤的認識與掌握有效的解決方法顯得尤為重要,本文就給大家列舉幾個C++常見錯誤及解決方法。

1、返回值返回錯誤

在項目的生命周期內(nèi),錯誤隨時隨地都有可能發(fā)生,雖然那些錯誤都在實際運行過程中發(fā)生,在設(shè)計、編碼和測試階段無法規(guī)避但卻是可以預(yù)見的,這時候我們就可以通過返回值返回錯誤信息。

請看代碼:

配圖2 初學(xué)者必看:C++常見錯誤及解決方法.jpg

以上代碼中,打開文件失敗是一種常見的可預(yù)見性錯誤,當打開一個文件時,如果打開失敗,則后續(xù)的操作將無法執(zhí)行,并會導(dǎo)致程序崩潰。此時可以通過返回錯誤碼的形式通知主調(diào)函數(shù)發(fā)生了錯誤。

2、變量未聲明

由于 C++ 是靜態(tài)類型編譯語言,這類型錯誤一般都在編譯階段就會發(fā)現(xiàn),不會帶入到運行時階段,但是這種類型的錯誤客觀存在,并且會增大我們的排錯時間。

出現(xiàn)這種類型的錯誤一般源自兩種情況,一種是從動態(tài)語言轉(zhuǎn)為使用 C++ ,由于習慣問題而直接使用未定義的對象;另一種是由于粗心而寫錯了變量名字,導(dǎo)致編譯器理解為一個新的未聲明的變量。

3、內(nèi)存訪問越界

配圖3 初學(xué)者必看:C++常見錯誤及解決方法.jpg

內(nèi)存越界訪問通常發(fā)生在數(shù)組、字符串或者連續(xù)內(nèi)存的訪問。有兩種情況:

1.寫越界,又叫緩沖區(qū)溢出。內(nèi)存寫越界造成的后果是非常嚴重的。例如訪問數(shù)組越界可能會修改訪問數(shù)組的循環(huán)變量,造成死循環(huán)。

2.讀越界,讀了不屬于自己的內(nèi)存空間。如果所讀的內(nèi)存地址是無效的,程序會立即崩潰。如果所讀內(nèi)存地址是有效的,讀入的時候不會有錯誤,但是讀入的數(shù)據(jù)是隨機的,可能會產(chǎn)生不可控制的后果。

排查內(nèi)存越界錯誤的方法包括:

1.使用BoundChecker進行調(diào)試,BoundChecker在代碼編譯時加入了大量的附加處理,其中包括內(nèi)存堆棧檢測等,其實ms的 debug模式也做了許多的類似操作,但debug模式下的一些代碼行為,如初始化變量,和Release下的代碼執(zhí)行不同,所以用debug調(diào)試不是完美的方式

2.類內(nèi)部出現(xiàn)莫名其妙的錯誤時,查看 this 指針是否變化,必要的時候進行手手工檢查

3.在調(diào)試的 “查看” 窗口 輸入:@err,hr 看全局錯誤變量的內(nèi)容

4.注釋掉部分代碼,看是否錯誤還出現(xiàn),注釋的最佳方式是二分法

5.查看程序異常處的反匯編代碼,分析原因

6.最后的辦法:代碼復(fù)查

內(nèi)存訪問越界不屬于語法錯誤,無法通過編譯器發(fā)現(xiàn),甚至程序運行初期也不會發(fā)生錯誤,直到某些特定情況下才會由于內(nèi)存越界而導(dǎo)致程序崩潰,此時程序已經(jīng)運行一段時間了。內(nèi)存越界也無法從根本上避免,只能預(yù)防。

4、內(nèi)存泄露

內(nèi)存泄露是指應(yīng)用程序未釋放動態(tài)申請的且不再使用的內(nèi)存,原因可能是程序員疏忽或者錯誤造成程序異常。

配圖4 初學(xué)者必看:C++常見錯誤及解決方法.jpg

在C/C++中,內(nèi)存管理器不會幫助你自動回收不再使用的內(nèi)存,不管在什么情況下,采取謹慎的態(tài)度,杜絕內(nèi)存泄露的出現(xiàn),都是上策。盡管一些工具可以幫助我們檢查內(nèi)存泄露問題,但是編程時還是應(yīng)該仔細一點,盡早排除這類錯誤,工具只是用作驗證的手段。

配圖5 初學(xué)者必看:C++常見錯誤及解決方法.jpg

5、函數(shù)跳轉(zhuǎn)處理錯誤

函數(shù)跳轉(zhuǎn)方式主要過程為:先調(diào)用函數(shù)setjmp,用變量記錄當前主函數(shù)被執(zhí)行到的位置,然后在函數(shù)中如果調(diào)用了longjmp,程序的執(zhí)行流程將返回到setjmp記錄的變量所記錄的位置,并使setjmp的返回值為設(shè)定的-1。這時,通過判斷返回值,就可以知道所需的操作是否正確完成。

請看代碼:

配圖6 初學(xué)者必看:C++常見錯誤及解決方法.jpg

以上代碼中當打開文件的操作失敗時,該工程接下來的操作將無法進行,因此可以通過函數(shù)條轉(zhuǎn)的方式實現(xiàn)錯誤的通知,為后續(xù)進一步操作打好基礎(chǔ)。

軟件編程的過程中,程序員所犯的并不一定是重大錯誤,反而一些常見的錯誤屢見不鮮。這些錯誤嚴重影響到編程中測試和調(diào)試的時間。所以,在編程的過程中,要時時提醒自己,告誡自己避免這些錯誤。