📄 subject_15920.htm
字号:
<p>
序号:15920 发表者:古天龙 发表日期:2002-09-23 19:23:34
<br>主题:我用CPtrList来管理所有的SOCKET连接,在OnClose事件后删除SOCKET对象,还要更新CPtr
<br>内容:我用CPtrList来管理所有的SOCKET连接,在OnClose()事件后要在对象外删除SOCKET对象,还要更新CPtrList中的数据,应该怎样做?如果在OnClose()中直接调用相关的函数就会出现内存异常。<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Aikoc 回复日期:2002-09-24 08:55:19
<br>内容:应该都可以的,你贴代码出来看看.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xyg 回复日期:2002-09-24 11:40:17
<br>内容:当然不能在OnClose()中删除SOCKET对象了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:古天龙 回复日期:2002-09-25 13:16:06
<br>内容:有问题的代码片段如下:<BR><BR>CServeSock::OnAccept(INT nErrorCode)<BR>{<BR> ……<BR> CSessionSock* psock = new CSessionSock;<BR> Accept(*psock);<BR> m_pDlg->m_listSession.AddTail(psock);<BR> ……<BR>}<BR><BR> ……<BR>CSessionSock::OnClose(INT nErrorCode)<BR>{<BR> ……<BR> m_pDlg->CloseSock(this);<BR> ……<BR>}<BR><BR>CMyDlg::CloseSock(CAsyncSocket* psock)<BR>{<BR> ……<BR> psock->ShutDown();<BR> psock->Close();<BR> delete psock; <------- 这个地方老是报错。<BR> //从LIST中删除psock<BR> m_listSession.RemoveAt(m_listSession.Find(psock));<BR> ……<BR>}<BR><BR>我也知道delete psock是处在OnClose()的调用中,所以删除会报错,请各位高手<BR>帮我想办法解决这个内存回收的问题,不胜感激!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:Aikoc 回复日期:2002-09-25 13:44:51
<br>内容:这样当然不行的,<BR>你将this 传出了,<BR>--------------------------<BR> m_pDlg->CloseSock(this);<BR> ……<BR>--------------------------<BR><BR>又在传出的地方将其delete.那你叫m_pDlg->CloseSock怎么返回哑<BR>--------------------------<BR> delete psock; <------- 这个地方老是报错。<BR>--------------------------<BR><BR>可以改为<BR>CSessionSock::OnClose(INT nErrorCode)<BR>{<BR> ……<BR> //从LIST中删除psock<BR> m_listSession.RemoveAt(m_listSession.Find(this));<BR> ShutDown();<BR> Close();<BR> delete this;<BR> ……<BR>}<BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -