Attach 内存泄露。请问如何解决呢?代码如下

hshibin 2018-10-20 03:42:17
void CListenSocket::OnAccept(int nErrorCode)
{
// New connection is being established


// Accept the connection using a temp CSocket object.
Accept(m_sockit);

// Create a thread to handle the connection. The thread is created suspended so that we can
// set variables in CConnectThread before it starts executing.
CConnectThread* pThread = (CConnectThread*)AfxBeginThread(RUNTIME_CLASS(CConnectThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (!pThread)
{
m_sockit.Close();
TRACE("Could not create thread\n");
return;
}


pThread->m_hSocket = m_sockit.Detach();
pThread->ResumeThread();

//heartbea counting;
l_heartbeacounting++;
l_heartbeacounting %= 0xFFFFFF;

CAsyncSocket::OnAccept(nErrorCode);
}




BOOL CConnectThread::InitInstance()
{

CSocket sock;
sock.Attach(m_hSocket); 这里会内存泄露。频繁的创建线程后关闭socket内存会一直涨。请问怎么解决
//closesocket(m_hSocket);
sock.Close();

return TRUE;
}

...全文
186 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
鉴于本人水平有限,仅给你一个大致的概念:1】智能指针(),其本质是将原始指针()封装在一个类模板中;2】其内核重载了解引用*运算符与指向运算符 ->,以使其在形式上看来,就如同使用普通指针一样;3】其析构函数将在其所引用的对象离开其作用域之后,自动删除其所引用的对象(在内存分配异常情形下亦能保证内存得以释放,此为重点);4】具体内容请参见上述那本书......
  • 打赏
  • 举报
回复
推荐你一本书:《C++ Templates The Complete Guide》中文版 [美]David Vandevoorde Nicolai M. Josuttis 著 陈伟柱 译 具体请参见本书第20章 智能指针
hshibin 2018-10-20
  • 打赏
  • 举报
回复
int CConnectThread::Run() { // TODO: 在此添加专用代码和/或调用基类 CSocket sock; sock.Attach(m_hSocket); //closesocket(m_hSocket); SOCKET hSocket; hSocket=sock.Detach(); //sock.Close(); ::closesocket(hSocket); return 0; } Detach 后再关闭 也不行。也还会泄露。
hshibin 2018-10-20
  • 打赏
  • 举报
回复
引用 1 楼 Tsinghua_University 的回复:
尝试使用智能指针(smart pointers)
你说的智能指针怎么用呢?
  • 打赏
  • 举报
回复
尝试使用智能指针(smart pointers)
Java Agent是Arthas使用的技术,是Skywalking使用的技术,是一份十分重要的技术。 课程的稀缺性在此之前,市面上并没有针对Java Agent进行系统介绍的课程。 通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。这些内容有如下特点:内容质量不一详略程度不一学习难度千差万别总体上来说,学习者很难有一个整体认知、系统学习的过程。 课程的设计目标 在构思课程内容时,本课程带有以下目标:课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。构造完整、统一的知识体系:不是零散的知识点堆砌,而是有一个统一的贯穿始终的知识框架。具有可操作性的代码示例,不只是讲概念,更注意于实践。课程内容安排 本课程通过四章内容对Java Agent相关知识进行讲解:第一章,介绍Agent Jar的三个组成部分:Manifest、Agent Class和ClassFileTransformer。第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。第四章,Java Agent的应用与技巧。 通过本课程的学习,让同学们更好地建立起一个完整的知识体系:  讲师介绍我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。 目前,我的课程都是围绕着“Java字节码”技术展开: 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会《Java ASM系列》(免费课程)是一个操作字节码的类库《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” 因此,我对字节码技术有较为深入的研究和理解,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~ 

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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