(1) 棧上變數必須初始化
(2) 從堆上分配的記憶體必須初始化
(3) 棧上區域性變數是否有大陣列變數,導致棧超出預設限制溢位
(4) 棧中是否有不合理的遞迴,導致棧超出預設限制溢位
(5) 必須對記憶體耗盡的情況進行處理. 注意new在記憶體不足時的處理方式
(6) 釋放某個指標後,必須將該指標變數賦值為null, 避免野指標的出現
(7) 禁止對同一指標delete或者free兩次或以上
(8) 對陣列操作,必須強制確保下標不會越界
(9) 避免頻繁的不等長小記憶體申請和釋放
(10) 記憶體申請和釋放必須配對,防止記憶體洩漏
(11) 析構陣列型別必須使用 delete形式
(12) free和malloc, delete和new 必須配對使用,不能混用
(13) 執行緒的使用也是占用了記憶體,是否考慮到了執行緒釋放
(14) 對於覆蓋標準的operator new和operator delete函式, 必須配對重寫
(15) 對於記憶體長度,不能靠自己計算,必須使用sizeof和注意位元組對齊
(16) 對於c字串,是否考慮到字串末位的'/0'結束符, 比如: char *p = "wokao"; char buffer[5]; strpcy(buffer, p);
(17) 使用strcpy(char *dest, const char *src)等str系列函式,是否考慮到了dest緩衝溢位的情況, 應該優先確保dest不會溢位或者使用n族函式
(18) 使用int sprintf(char *string, char *farmat [,argument,...]);函式的時候是否考慮到了溢位,應該優先確保string不會溢位或者使用snprintf函式
(19) 使用fgets函式替代gets
(20) mem族函式注意確保操作空間不會溢位
(21) 進行記憶體拷貝,賦值或者初始化的時候,盡量用mem函式族替代迴圈操作
(22) 小心指標和陣列的區別, 比如const char *p = "12345678", char buffer = "12345678"; cout<(23) 是否試圖修改常量字串,比如const char* p = "wokao", p[0] ='r';
(24) 是否考慮陣列名作為函式引數傳遞時,陣列退化為指標。
(25) 注意避免大量臨時物件的產生導致記憶體的急速消耗, 比如連續的很長的 string + 操作
(26) 注意避免對臨時物件進行引用,比如 string a = "123"; string b = "456"; const char* p = (a + b).c_str();
(27) 在函式引數傳遞時,盡量使用指標或者引用,避免直接傳值操作,特別是大物件型別
(28) 對於auto_ptr智慧型指標的使用,是否考慮到了所有權的轉移,導致的記憶體釋放
(29) 對於vector類,是否考慮到了其內部記憶體不足時,其自動擴充套件2倍記憶體機制,對程式執行是否有影響
(30) 在使用stl string類的時候,是否考慮了string類實現的多樣性對程式的影響。
(31) 在某個模組,物件需要結束其生命週期的時候,是否釋放了其對應的記憶體資源。比如c++的析構函式中是否delete了其對應的記憶體資源
(32) 小心共享記憶體上存放有vtable的物件,另外乙個程序進行刪除時,導致非法訪問
(33) 不能夠對含有vtable的物件進行memset初始化
(34) 計算結構變數偏移必須使用offsetof
安全測試 Checklist
序號檢查項 檢查方法 1埠監聽檢查 不跨vm訪問的埠不能監聽在業務ip,以及0.0.0.0上,一般只能在127.0.0.1上 1 使用netstat an grep tcp命令檢查所有tcp埠 2 根據組網及模組間通訊來確保是否跨vm通訊.r2c10為雙機 跨vm訪問的埠列表 不跨vm訪問的埠列表 ...
《checklist程式設計規範》筆記
簡單的總結一下c編碼風格 第一章 排版1.1 縮排 整個專案中要麼4個空格縮排,要麼乙個tab鍵縮排,不允許混用。tab鍵要保證寬度是4個空格 縮排要求 if else case forwhile語句要縮排,要縮排,extern c namespace 塊 case除外 空格使用 1.關鍵字if e...
介面引數校驗checklist
正常情況下,前後端對於請求的引數都需要校驗的,這能提高應用程式的穩定性 可維護性,而對於前後臺如果能將這種不可缺少校驗規則彙總並制定一套規範,在每乙個應用程式中都使用這種規範,能給帶來不少好處。那在哪些情況下適合使用前 後端校驗了 當介面請求引數不符合 api約定,期望返回明確的提示資訊 引數校驗點...