C++內存問題

可怕的內存問題,你一不注意,可能會讓你費勁半天,甚至是好幾天驚恐,所以養成好的習慣非常重要!!

1、申請內存不一定申請成功,因此申請內存後一定要判斷是否申請成功~如下
         int *p=new int[30];
         if(!p) cout<<"allocation failure";


2、野指針問題(兩種)

何爲野指針,即一個指針指着不合法的地方,或者指着無效的數據

A

char*p=new?char[6];
strcpy(p,"hello");
delete[]p;
//此時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
{
    std::vector v;
}
對象v是在棧上創建的。但是,STL 的vector類其實是在堆上面存儲數據的(這點可以查看源代碼)。因此,只有對象v本身是在 棧上的,它所管理的數據(這些數據大多數時候都會遠大於其本身的大小)還是保存在堆上。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章