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

线程内new对象指针,线程退出后,历程delete出错

2012-12-31 
线程内new对象指针,线程退出后,进程delete出错.部分主要代码CRITICAL_SECTION g_Lockclass A {...}std::v

线程内new对象指针,线程退出后,进程delete出错.
部分主要代码


CRITICAL_SECTION g_Lock;
class A 
{
...
}
std::vector<A *> g_A;
//线程中new
DWORD WINAPI Thread(LPVOID lParam)
{
 EnterCriticalSection(&g_Lock);
 A *pA = new A;
 g_A.push_back(pA);
 LeaveCriticalSection(&g_Lock);
}
//线程退出
//进程delete
void CleanA()
{
EnterCriticalSection(&g_Lock);

std::vector <A *>::iterator IterA;
for (IterA = g_A.begin(); IterA != g_A.end( ); IterA++)
{
if ( *IterA != NULL )
{
   delete *IterA;  //单步跟踪,执行完这句也不报错,直接飞了.
}
}

g_A.clear();

LeaveCriticalSection(&g_Lock);
}


把CleanA()放在线程退出前就没有问题.问题是我已经在线程中把new后的指针对象放入全局Vector中了.为什么线程退出后,进程中delete还会错误.望各位指教,谢谢.
[解决办法]
线程不会是在DLL里启动的吧,代码目测貌似没问题
[解决办法]
其它地方有delete操作吗?
[解决办法]
MFC中的某些新控件new之后,在析构的时候会自动释放。

不知道楼主是自定义类么?还是什么?

代码完全看不出问题啊。

[解决办法]
你的vector erase方法有问题,迭代器会失效


for (IterA = g_A.begin(); IterA != g_A.end();)
    {
        if (pA == *IterA)
        {
            IterA = g_A.erase(IterA);
 
            delete pA;
 
            break;
        }
        else
           IterA++;
    }

热点排行