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;
}

...全文
185 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)

64,648

社区成员

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

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