首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

线程函数中new出来的变量怎么释放?

2012-02-14 
线程函数中new出来的变量如何释放???在线程函数中new出来的变量如何释放啊?为什么我delete总是出错!比如我

线程函数中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中的代码有改变指针的值吗?
[解决办法]
探讨
引用:
你不能把new和delete放到while循环的外面做吗?
delete会出错?你while中的代码有改变指针的值吗?


因为需求,new和delete必须放在while循环中,

我前面讲的不太清楚,其实是在反复new的时候出错,也就是卡在了这句上面:
char *pBuffer = new char[iLen]; //iLen……

[解决办法]
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这个指针有没有改变过。

热点排行