1. 程式人生 > >C++:記憶體洩漏引發的思考

C++:記憶體洩漏引發的思考

1、迴圈內建立變數(只要不是動態開闢的變數),不會增加記憶體使用

如下,這段程式並不會隨著每次迴圈不斷例項化a、pTempDataDI、TempDataDI3個變數而導致記憶體增加。因為VC/VS這些編譯器認為,每次例項化a、pTempDataDI、TempDataDI都是對應的同一片記憶體。

 while (1) {
    CDataDI *pTempDataDI = (CDataDI *) m_DataDIList.GetNext (pos1);
	int a=10;
	CDataDI  TempDataDI; 
 }

2、釋放連結串列的時候,不僅需要removeall,還需要delete所有元素

當釋放連結串列的時候,除了清空連結串列,還需要將連結串列中的每個節點delete掉。使用連結串列的時候經常沒有delete節點,而導致存洩漏問題

CObList tempGraphicList;
.....
CArchive ar(&OpenFile, CArchive::load);
tempGraphicList.Serialize (ar);//序列化得到新連結串列tempGraphicList
ar.Close();
...
POSITION tempGraphic = tempGraphicList.GetHeadPosition ();
while (tempGraphic != NULL) {
	CObList *ptempGraphic = (CObList *)tempGraphicList.GetNext (tempGraphic);
	delete ptempGraphic;//釋放連結串列中的每個節點
}
//******
tempGraphicList.RemoveAll ();