程式設計常見錯誤TOP10

2021-08-27 20:39:35 字數 1988 閱讀 1688

結合以前工作經驗,整理的編碼常見的錯誤、推薦風格,及原因:

程式設計常見錯誤top10:

返回值使用錯誤

呼叫函式的執行結果對流程有影響,卻未判斷返回值的

返回值使用不準確

返回值的巨集和判斷的巨集不是同一套

錯誤的型別轉換,返回值型別和賦值變數型別不一致

斷言的使用

在可能出現的位置使用斷言

系統資源使用

資源的申請和釋放不在同一層次。

資源的malloc和free要在同乙個if/while/for的層次內,這樣邏輯清晰,走查的時候好判斷是否有釋放。也不容易遺漏。

成對的系統資源操作之間異常退出。成對的malloc/free spin_lock/spin_unlock fopen/fclose之間,不允許有return操作。成對的資源申請、釋放之間如果有return語句,需要在return之前釋放資源,如果有多個資源、多個return的組合,需要考慮每個return時需要釋放的資源,複雜度很高、維護難度大。因此,不建議使用return,可以用ulret記錄返回狀態,只有在操作成功時才進行後續操作,在程式結尾同一進行return

過早進行資源申請導致不必要的回退或資源洩露。如果需要入口條件滿足才進行後續處理,應該先判斷入口條件再進行資源申請。

資源直接賦值給間接變數。間接變數包括:結構體欄位,多級指標,全域性變數。資源malloc等,要避免直接賦值給間接變數。原因包括:1、pclint等**檢查工具無法追蹤間接變數,直接賦值會導致工具無法檢測到資源洩露等問題。2、全域性變數等可能有併發使用,直接賦值可能存在賦值和初始化之間被排程時,訪問未初始化的資源

記憶體釋放

錯誤的函式釋放

記憶體釋放函式和申請函式要配套,自定義的結構如果有封裝申請函式要使用對應的釋放函式釋放所有資源。

釋放非法位址、重複釋放、釋放後再使用記憶體

釋放記憶體前未從結構上摘除

記憶體洩露、未第一時間釋放資源

記憶體越界

字串、記憶體拷貝、清零操作越界

緩衝區太小越界

非法引數未檢查導致越界

空野指標

釋放全域性變數資源後未清零變數

釋放結構體掛接的記憶體後,未清零字段

訪問空指標

未初始化

變數未初始化

資料結構欄位未初始化

動態記憶體未初始化

理論上所有的變數記憶體資料結構都需要進行初始化,初始化值一般是0,如果初始化值非0在memset後需要手動賦值初始化值

**冗餘

類似的大段**,如果有邏輯功能相同的大段**,需要封裝成函式,而不是ctrl c複製修改,大量重複**導致這段邏輯修改時,需要修改大量的地方,工作量大且容易出錯,維護成本高

反覆多重間接定址。特別是在迴圈操作中有大量-> . 等間接定址的操作,會較大的影響效能,建議使用區域性變數儲存定址後的值,在迴圈中直接使用。

為處理不可能事件引入虛假分支。

無必要的記憶體拷貝

無必要的申請靜態、動態記憶體

臨時使用小記憶體時,申請動態記憶體。一般小記憶體的概念是小於256byte的記憶體。

程式設計介面

模組或驅動介面使用錯誤

資源型介面設計

釋放引數攜帶的資源時規則不一致,要麼內部釋放要麼外部釋放,不能有同時存在的情況,否則容易使用出錯

復合資源申請釋放未封裝或封裝不對稱。如果乙個結構體內包含其他記憶體申請等資源組合成復合資源,需要封裝對應的申請、釋放函式,統一申請、釋放全部資源。後續對該資源的申請釋放通過封裝的介面來操作。

資源建立、獲取函式未將資源作為返回值而是引數。資源建立的函式理論上和malloc等類似,建議申請成功返回資源,申請失敗返回null。不建議將資源通過指標返回。

TOP 10 安全漏洞

top 10 安全漏洞 1 弱口令 弱的 易於猜中的和重新使用以前用過的口令都損害安全。測試賬戶擁有的口令強度弱且幾乎沒有監控。不要在系統或因特 點重新使用口令。2 沒有打過補丁的軟體 沒有打過補丁的 過時的 有漏洞的或仍處於預設配置狀態的軟體。大多數漏洞都可以通過及時的打上補丁和測試予以避免。充分...

熱門wordpress外掛程式 TOP 10

自動生成 的sitemap,有利於搜尋引擎蜘蛛更好的爬行 頁面,提高收錄量。生成聯絡表單,插入wordpress頁面,方便讀者與博主聯絡。功能強大的相簿外掛程式,如果部落格的很多,推薦使用這款外掛程式管理。wordpress.com的統計系統,使用這個外掛程式,可以在部落格後台檢視 流量,而且不會對...

烏雲TOP 10 簡單介紹

已知owasp top10的web漏洞,烏雲出了乙個更加符合中國國情的 烏雲 top10 for 2014。a1 網際網路洩密事件 撞庫攻擊 本質上來說是使用了不安全的口令,也許我可以將自己的密碼設定的很複雜,別人破解不出來。但對於撞庫攻擊而言,可以說是不怕神一樣的對手,就怕豬一樣的隊友。我們註冊使...