读书人

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

发布时间: 2012-12-31 11:57:52 作者: rapoo

线程内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++;
}

读书人网 >VC/MFC

热点推荐