CList<LVITEM*, LVITEM*> listItems;
POSITION listPos;
LVITEM* pItem;POSITION pos = pDragList->GetFirstSelectedItemPosition();
while(pos)
{
pItem = new LV_ITEM; //注意这行内存分配
ZeroMemory(pItem, sizeof (LV_ITEM));
pItem->iItem = m_nDragIndex;
pItem->mask = LVIF_TEXT;
pItem->pszText = new char; //注意这行内存分配
pItem->cchTextMax = 255; m_nDragIndex = pDragList->GetNextSelectedItem(pos); pItem->iItem = m_nDragIndex;
pDragList->GetItem(pItem);
listItems.AddTail(pItem);
} listPos = listItems.GetHeadPosition();
while(listPos)
{
pItem = listItems.GetNext(listPos);
m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex;
pItem->iItem = m_nDropIndex;
pDropList->InsertItem(pItem); pDropList->SetItemState(pItem->iItem, LVIS_SELECTED, LVIS_SELECTED);
//为什么在使用完后不进行 delete pItem; 来进行内存释放呢?
m_nDropIndex++;
}由以上代码所知,作者在使用完new后未进行释放,从我的观点来看势必导致内存泄漏,但是我用2000下的任务管理器察看,发现内存并未随着程序的使用而逐渐增大,我不知道这段代码是否就是应该不释放内存还是2000有着清理内存泄漏的功能?
若是增加内存清除函数的话,程序中的两次new该怎样清楚掉?
POSITION listPos;
LVITEM* pItem;POSITION pos = pDragList->GetFirstSelectedItemPosition();
while(pos)
{
pItem = new LV_ITEM; //注意这行内存分配
ZeroMemory(pItem, sizeof (LV_ITEM));
pItem->iItem = m_nDragIndex;
pItem->mask = LVIF_TEXT;
pItem->pszText = new char; //注意这行内存分配
pItem->cchTextMax = 255; m_nDragIndex = pDragList->GetNextSelectedItem(pos); pItem->iItem = m_nDragIndex;
pDragList->GetItem(pItem);
listItems.AddTail(pItem);
} listPos = listItems.GetHeadPosition();
while(listPos)
{
pItem = listItems.GetNext(listPos);
m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex;
pItem->iItem = m_nDropIndex;
pDropList->InsertItem(pItem); pDropList->SetItemState(pItem->iItem, LVIS_SELECTED, LVIS_SELECTED);
//为什么在使用完后不进行 delete pItem; 来进行内存释放呢?
m_nDropIndex++;
}由以上代码所知,作者在使用完new后未进行释放,从我的观点来看势必导致内存泄漏,但是我用2000下的任务管理器察看,发现内存并未随着程序的使用而逐渐增大,我不知道这段代码是否就是应该不释放内存还是2000有着清理内存泄漏的功能?
若是增加内存清除函数的话,程序中的两次new该怎样清楚掉?
---------------------------------------------------------------
//为什么在使用完后不进行 delete pItem; 来进行内存释放呢?
---------------------------------------------------------------
这里如果delete pItem,则造成pDropList有一个元素指向一个野指针pItem,
所以我认为这里不能delete
delete pItem->pszText;
delete pItem;
运行1000次也不过几k,何况程序运行完毕之后也会清除。你用任务管理器查看能看出来我就服了you了,建议你换个专门查看内存泄露的工具!