亚洲福利网站,国产精品久久国产三级国电话系列 ,欧美久久久久久,蜜桃av在线

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

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

  • 發布時間:
    2019-05-27
  • 版權所有:
    云和教育
  • 分享:

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

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

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

1、返回值返回錯誤

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

請看代碼:

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

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

2、變量未聲明

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

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

3、內存訪問越界

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

內存越界訪問通常發生在數組、字符串或者連續內存的訪問。有兩種情況:

1.寫越界,又叫緩沖區溢出。內存寫越界造成的后果是非常嚴重的。例如訪問數組越界可能會修改訪問數組的循環變量,造成死循環。

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

排查內存越界錯誤的方法包括:

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

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

3.在調試的 “查看” 窗口 輸入:@err,hr 看全局錯誤變量的內容

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

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

6.最后的辦法:代碼復查

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

4、內存泄露

內存泄露是指應用程序未釋放動態申請的且不再使用的內存,原因可能是程序員疏忽或者錯誤造成程序異常。

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

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

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

5、函數跳轉處理錯誤

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

請看代碼:

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

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

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

主站蜘蛛池模板: 铜川市| 麻栗坡县| 衡水市| 镶黄旗| 江阴市| 利辛县| 商南县| 枝江市| 北海市| 锦州市| 武安市| 临海市| 綦江县| 汕头市| 肇庆市| 项城市| 朝阳市| 澄城县| 舞阳县| 栾城县| 南郑县| 稷山县| 靖边县| 山丹县| 都昌县| 康平县| 会理县| 崇信县| 德阳市| 凉山| 阿荣旗| 大埔区| 克东县| 镇原县| 米林县| 营口市| 五河县| 德格县| 盐池县| 萍乡市| 平远县|