C++:記憶體洩漏引發的思考
阿新 • • 發佈:2019-01-07
1、迴圈內建立變數(只要不是動態開闢的變數),不會增加記憶體使用
如下,這段程式並不會隨著每次迴圈不斷例項化a、pTempDataDI、TempDataDI
3個變數而導致記憶體增加。因為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 ();