莫明奇妙的泄露
作了一个基于对话框的网络通讯程序程序一开始在Dlg::OnInitDialog()中配置都好着然后调用
BOOL Dlg::OnInitDialog()
{
...
sock=socket(AF_INET,SOCK_STREAM,0);
...
AfxBeginThread(&thread,0);
}
现成代码为
UINT thread(LPVOID p)
{
...
rsvsock=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addlen));
if (dlg->rsvsock==INVALID_SOCKET)
{
//服务器已经关闭
AfxEndThread(0);
}
}
问题来了如果我单领做个按钮里面事件写着
void CCServerDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CCServerDlg* dlg = (CCServerDlg*)AfxGetApp()->GetMainWnd();
closesocket(dlg->rsvsock);
closesocket(dlg->sock);
}
然后点点击OnCancel就会关闭无泄露
但是直接写在这个函数里面
void CCServerDlg::OnCancel()
{
// TODO: 在此添加控件通知处理程序代码
CCServerDlg* dlg = (CCServerDlg*)AfxGetApp()->GetMainWnd();
closesocket(dlg->rsvsock);
closesocket(dlg->sock);
}
就有泄露提示如下:
Detected memory leaks!
Dumping objects ->
thrdcore.cpp(311) : {79} client block at 0x00BA52C8, subtype c0, 64 bytes long.
a CWinThread object at $00BA52C8, 64 bytes long
Object dump complete.
请高手解释一下