读书人

关于临时内存释放的一个有关问题

发布时间: 2012-05-05 17:21:10 作者: rapoo

关于临时内存释放的一个问题
#include "./Person.h"
void CClipBoardDlg::OnButton3() //
{
// TODO: Add your control notification handler code here
//
Person *pData=new Person;
GetDlgItemText(IDC_EDIT1,pData->m_strName);
GetDlgItemText(IDC_EDIT2,pData->m_strSex);
CString strAge;
GetDlgItemText(IDC_EDIT3,strAge);
pData->m_iAge=atoi(strAge);
//串行化到内存文件
BYTE* pTemp=new BYTE[1024];
CMemFile fMem;
fMem.Attach(pTemp,1024,128);
CArchive myworker(&fMem,CArchive::store);
pData->Serialize(myworker);
myworker.Close();
int len=fMem.GetLength();
fMem.Detach();
//写入剪贴板
::OpenClipboard(GetSafeHwnd());
::EmptyClipboard();
HANDLE hMem=GlobalAlloc(GMEM_MOVEABLE,1024);
BYTE* pMem=(BYTE*)GlobalLock(hMem);
memcpy(pMem,pTemp,len);
GlobalUnlock(hMem);
int iFormat=RegisterClipboardFormat("Person");
SetClipboardData(iFormat,hMem);
CloseClipboard();

//delete pTemp;//为神马不能释放?
}

pTemp是一个临时存放串行化数据的内存,写入剪贴板以后想释放,编译无问题但是运行时报错,这断内存为啥不能释放呢?不释放则没问题

[解决办法]
你最好去顶pTemp没有被修改。也就是说pTemp保存的是new返回的地址。否则delete[]pTemp的时候会出错
[解决办法]
另一种可能,pTemp使用溢出,也会出现这问题

读书人网 >C++

热点推荐