C++:内存泄漏引发的思考

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dashumak/article/details/84947473

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 ();

猜你喜欢

转载自blog.csdn.net/dashumak/article/details/84947473