线程函数中new出来的变量如何释放???
在线程函数中new出来的变量如何释放啊?为什么我delete总是出错!
比如我在线程中new一个字符串,在线程中的while循环中new,while循环末尾delete。
while(g_bCancel == false){//结束条件为取消 char *pBuffer = new char[iLen]; //iLen每次大小不同 memset(pBuffer, 0, iLen); ...... delete [] pBuffer; pBuffer = NULL;}CNoTrackObject* CThreadLocalObject::GetData( CNoTrackObject* (AFXAPI* pfnCreateObject)()){ ENSURE(pfnCreateObject); if (m_nSlot == 0) { if (_afxThreadData == NULL) { _afxThreadData = new(__afxThreadData) CThreadSlotData; ENSURE(_afxThreadData != NULL); } m_nSlot = _afxThreadData->AllocSlot(); ENSURE(m_nSlot != 0); } [color=#FF0000]//崩溃在这句代码上面[/color] CNoTrackObject* pValue = static_cast<CNoTrackObject*>(_afxThreadData->GetThreadValue(m_nSlot)); if (pValue == NULL) { // allocate zero-init object pValue = (*pfnCreateObject)(); // set tls data to newly created object _afxThreadData->SetValue(m_nSlot, pValue); ASSERT(_afxThreadData->GetThreadValue(m_nSlot) == pValue); } return pValue;}char *pBuffer = new char[iLen + 1]; //是否应该加1呢?memset(pBuffer, 0, iLen+1);//如果不是这样的话下面你用到pBuffer的数据的时候,你Copy一个string为iLen的长度给pBuffer的时//候会造出堆乱,到时候你Delete的情况就有问题.
[解决办法]
关键在于从new到delete之间,pBuffer这个指针有没有改变过。