线程挂起后怎么出现内存泄漏?

yjukh 2009-07-27 09:48:06
MFC的工程。
在多线程刚进去时动态创建了一个数组,运算完毕后将其释放。
正常的顺序下运行没有问题,也没有内存泄漏。但加了一个暂停(SuspendThread)的操作后,会提示内存泄漏,这是怎么回事呢?


DWORD WINAPI myThread(LPVOID)
{
float *pData=new float[n];

for()
{
……
}

delete []pData;
}

提示就是pData泄漏
...全文
224 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gg606 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yjukh 的回复:]
刚又试了几下,的确如楼上所说
测试的时候我点了暂停就退出了,所以会看到内存泄漏。
暂停后如果再继续就没问题。
[/Quote]

那就是你考虑不周全了!你退出前应该检测工作线程的状态呀!
如果ACTIVE得先退出线程,再退出程序呀!
yjukh 2009-07-27
  • 打赏
  • 举报
回复

刚又试了几下,的确如楼上所说
测试的时候我点了暂停就退出了,所以会看到内存泄漏。
暂停后如果再继续就没问题。
dronly 2009-07-27
  • 打赏
  • 举报
回复
会不会是你挂起的时候没执行到 delete []pData;
这个地方?

虽然你程序的其他线程上面写了SuspendThread 但不能保证一定就在 delete []pData; 后的哦
gg606 2009-07-27
  • 打赏
  • 举报
回复
楼主的线程创建和挂起用的都是API函数?有没有不配套情况?
lwykj 2009-07-27
  • 打赏
  • 举报
回复
如果线程 被停 没有恢复, 当然就不会执行到删除那里了!
bohut 2009-07-27
  • 打赏
  • 举报
回复
new()的下面添加TRACE("new()!\n");
调试程序,看看是否多次执行
yjukh 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zoulie 的回复:]
你在其它线程里还有对pData操作么?
[/Quote]

没有,pData是个线程内部的局部变量,外面也操作不了
zoulie 2009-07-27
  • 打赏
  • 举报
回复
你在其它线程里还有对pData操作么?
fandouC 2009-07-27
  • 打赏
  • 举报
回复
暂停后CPU执行其他线程,线程切换引起的?我也不是很明白

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧