可怕的記憶體問題,你一不注意,可能會讓你費勁半天,甚至是好幾天
1、申請記憶體不一定申請成功,因此申請記憶體後一定要判斷是否申請成功~如下
int *p=new int[30];
if(!p) cout<
2、野指標問題(兩種)
何為野指標,即乙個指標指著不合法的地方,或者指著無效的資料 a
char*p=new?char[6];
strcpy(p,"hello");
deletep;
//此時p為野指標
p=null;//新增這句才是好的程式設計習慣 b
指標變數沒有被初始化。
3、動態記憶體的申請與釋放必須配對,防止記憶體洩漏。
4、記憶體洩漏就是佔著茅坑不拉屎
5、堆和棧的區別是函式執行完,會釋放棧上的空間,但main函式執行完才會釋放堆上的空間。
6、new建立類物件例子:
ctest* ptest = new ctest();
delete ptest;//需釋放
ctest mtest;//此種建立方式,使用完後不需要手動釋放,該類析構函式會自動執行。而new申請的物件,則只有呼叫到delete時再會執行析構函式,如果程式退出而沒有執行delete則會造成記憶體洩漏
類如果沒有在析構函式中釋放,那麼你就得delete 物件名
7、void func
物件v是在棧上建立的。但是,stl 的vector類其實是在堆上面儲存資料的(這點可以檢視源**)。因此,只有物件v本身是在棧上的,它所管理的資料(這些資料大多數時候都會遠大於其本身的大小)還是儲存在堆上。
C 記憶體問題
在系統開發過程中出現的bug相對而言是比較好解決的,花費在這個上面的除錯代價不是很大,但是在系統整合後的bug往往是難以定位的bug 最好方式是打樁,通過打樁可以初步鎖定出錯的位置,如 進入函式前列印日誌,離開時再次列印日誌 而這些難以定位的bug基本分為2類 記憶體錯誤和並非問題。1 記憶體洩露 ...
C 記憶體問題
一 記憶體分配方式 1.從靜態儲存區域分配。內存在程式編譯的過程中就已經分配好,這塊內存在程式的整個執行期間都存在。例如 全域性變數和static變數。2.在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時,這些儲存單元會被自動釋放,棧記憶體分配運算內置於處理器的指...
C 記憶體對齊問題
最近在開發客戶端網路連線過程遇到乙個非常奇怪的問題,這個問題卡了兩天多時間,百般嘗試,一籌莫展!一度讓我懷疑人生了 最後突然想到最近使用 pragma pack,設定記憶體對齊。當我取消這個 後,一切都正常了!事件起因與網路資料協議的定義 struct taginfo word為兩個位元組,byte...