线程函数中new出来的变量如何释放???
在线程函数中new出来的变量如何释放啊?为什么我delete总是出错!
比如我在线程中new一个字符串,在线程中的while循环中new,while循环末尾delete。
- C/C++ code
while(g_bCancel == false){//结束条件为取消 char *pBuffer = new char[iLen]; //iLen每次大小不同 memset(pBuffer, 0, iLen); ...... delete [] pBuffer; pBuffer = NULL;}但这却会导致程序崩溃,使程序中断在CNoTrackObject* CThreadLocalObject::GetData中。
- C/C++ code
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;}请问这到底是怎么回事啊???请高手讲讲!不胜感激!
[解决办法]
你把while里的封装成函数,调用这个函数
[解决办法]
你不能把new和delete放到while循环的外面做吗?
delete会出错?你while中的代码有改变指针的值吗?
[解决办法]
[解决办法]
pBuffer有没有进行字符串拷贝,长度是否正确
[解决办法]
问题应该不会出现在New, delete中,会不会是在使用变量pBuffer的时候.
- C/C++ code
char *pBuffer = new char[iLen + 1]; //是否应该加1呢?memset(pBuffer, 0, iLen+1);//如果不是这样的话下面你用到pBuffer的数据的时候,你Copy一个string为iLen的长度给pBuffer的时//候会造出堆乱,到时候你Delete的情况就有问题.
[解决办法]
关键在于从new到delete之间,pBuffer这个指针有没有改变过。