在c/c++實際工程開發中記憶體操作,稍不留神就會出現千奇百怪的各種bug,導致整個專案組花很大的時間使用各種工具定位錯誤,解決記憶體操作問題!
1、防止陣列越界操作,使用柔性陣列;
2、記憶體洩露和多次釋放,使用智慧型指標;
當然你會說還需要注意使用malloc申請了記憶體後,應該立即檢查指標值是否為null,防止使用值為null的指標;動態申請操作必須和釋放操作匹配;free指標之後必須立即賦值為null,防止野指標等等。有些是習慣問題,如果你注意到了,這都不是問題!
柔性陣列是陣列大小待定的陣列,通過結構體將成員的結構用malloc ()函式進行記憶體的動態分配,並且分配的記憶體應該大於結構的大小,以適應柔性陣列的預期大小,防止陣列越界的問題。
c語言實現:
c++實現:
在編寫大型程式的時候,有時我們忘記delete分配的記憶體,或者多次釋放分配的記憶體,這樣會造成記憶體洩露和程式的down機。在程式開發中,預先編寫智慧型指標類代替原生的指標。出現問題後直接返回錯誤。
通過類模板實現的步驟:
(1)建構函式接管記憶體的申請;
(2)析構函式確保記憶體被及時釋放;
(3)過載指標運算子*和->模擬指標的行為;
(4)過載比較運算子== 和 != 模擬指標的比較。
//功能:智慧型指標
#include #include #include #include "smartpointer.hpp"
using namespace std;
class test
;#endif
//智慧型指標 類成員函式定義 標頭檔案 smartpoint.hpp
#ifndef _smartpointer_def_h_
#define _smartpointer_def_h_
#include "smartpointer.h"
templatesmartpointer::smartpointer()
templatesmartpointer::smartpointer(const t* pointer)
templatesmartpointer::~smartpointer()
templatet* smartpointer::operator->()
templatet& smartpointer::operator*()
templatebool smartpointer::operator==(const smartpointer& operater)
templatebool smartpointer::operator!=(const smartpointer& operater)
#endif
一步一步 Sql Azure
一步一步 sql azure 1.使用 windowsazure 平台賬號登陸 2.新建sqlazure server 3.新建資料庫 4.為sql azure server 新增防火牆規則,只有將本機新增到規則裡才能從本機連線到該sqlazure server 5.連線到sql azure ser...
一步一步學Ruby 十八 陣列
一 陣列定義和基本操作1.陣列的定義和其它語言一樣,ruby裡的陣列並不限定型別.x 1,2,3,4 puts x 2 輸出3 x 2 1 puts x 2 輸出 4 x 2 jack 3 輸出 jackjackjack2.陣列可以不設初始值,可以使用 和pop的操作,後進先出x x jack x ...
一步一步學Ruby 十八 陣列
一 陣列定義和基本操作1.陣列的定義和其它語言一樣,ruby裡的陣列並不限定型別.x 1,2,3,4 puts x 2 輸出3 x 2 1 puts x 2 輸出 4 x 2 jack 3 輸出 jackjackjack2.陣列可以不設初始值,可以使用 和pop的操作,後進先出x x jack x ...