【語言】C++野指針分析

一、野指針分析

	TCHAR szHello[MAX_LOADSTRING];
	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
	int *p = new int;   //&p是當前函數棧的地址,p是內存new出來的一個地址
	delete p;           //p仍然保留原來的值
	p = NULL;	    //p爲0x00000000


二、鏈表指針釋放

struct D_Link
{
      char DATA;
     struct D_Link *Next;
}

D_Link *p1;

while(p !=NULL) //釋放動態鏈表指針
{

	p1 = p;

	p = p->next;//這裏已經將後面的節點指針覆蓋到前面的指針了,,所以不用置null,最後p->next = NULL,這時p=null

	free(p1);//釋放指針,或者用delete p1;

}

三、內存管理淺析

     new、delete在堆中申請內存,相應的API有HeapAlloc;malloc、free在自由存儲區釋放內存,每當申請時,操作系統應該爲該進程建立一個存儲區登記鏈表,所以一定要free掉,防止內存泄露。

    另外,new出來的內存,只有在程序運行時,纔有意義。Terminate進程時,系統會回收它所有的資源(參見Windows核心編程第4版 4.3.3)。

參考:1、C/C++中delete/free指針設置null的好處

2、動態鏈表釋放

3、C/C++內存機制

4、C++內存管理 全局new delete重載

5、強制結束進程,資源釋放問題?

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