⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_57430.htm

📁 vc
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>
序号:57430 发表者:金沐灶 发表日期:2003-10-25 12:03:56
<br>主题:一个问题,有点奇怪。上个问题发错了,上好意思。
<br>内容:在类CDialog中,定义了成员变量:……BOOL m_bLiaoSend;CMydo m_do;……,但是退出时出错,是m_do内存释放出错,但是我把他写成:……CMydo m_do;BOOL m_bLiaoSend;……,完全正确,我记得好像有内存对齐的说法,是不是就是这种情况,如何确保不发生类似情况。先谢啦。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:金沐灶 回复日期:2003-10-25 12:07:08
<br>内容:又发错了,第一句是在类CMyDialog中。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lijb 回复日期:2003-10-25 14:12:10
<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>
回复者:金沐灶 回复日期:2003-10-25 18:48:54
<br>内容:这是正确的<BR>// RealcomDlg.h : 头文件<BR>//<BR><BR>#pragma once<BR>#include &#34;spClientEvents.h&#34;<BR>#include &#34;Mydo.h&#34;<BR>// CRealcomDlg 对话框<BR>class CRealcomDlg : public CDialog<BR>{<BR>// 构造<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRealcomDlg(CWnd* pParent = NULL);&nbsp;&nbsp;&nbsp;&nbsp;// 标准构造函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;//界面<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDialog m_dlgGet;CDialog m_dlgStatus;CDialog m_dlgSend;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTabCtrl * m_ptcShow;int m_nTest;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CListCtrl * m_plcStatus;CListCtrl * m_plcGet;CListCtrl * m_plcSend;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//设置数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataName;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataUID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataPWD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNUID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNPWD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOUID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOPWD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//注册表项是否为空(决定程序是否初始化)<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL m_bHavaInit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//状态栏<BR>&nbsp;&nbsp;&nbsp;&nbsp;NOTIFYICONDATA m_tnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//时钟,数据库,服务器连接<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL m_bTimer1,m_bTimer2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;_ConnectionPtr m_pConn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL m_bUNConn,m_bMOConn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IspClient * m_ispClientUN;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IspClient * m_ispClientMO;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CspClientEvents m_esUN;DWORD m_desUN;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CspClientEvents m_esMO;DWORD m_desMO;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMydo m_do;BOOL m_bLiaoSend;<BR>// 对话框数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;enum { IDD = IDD_REALCOM_DIALOG };<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void DoDataExchange(CDataExchange* pDX);&nbsp;&nbsp;&nbsp;&nbsp;// DDX/DDV 支持<BR><BR><BR>// 实现<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;//公共的方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;//处理客户事件响应<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp0(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp1(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp2(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp3(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyReceiveMsg(UINT uIsUN,CString source,CString destination,CString service,long msgfmt,CString cmd,long len,CString msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySendResp(UINT uIsUN,unsigned long result,unsigned long seqid);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//连接相关<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConnUN();<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConnMO();<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConnData();<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConn();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyDisConn();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//数据处理<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySend();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyGetBack(long lID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyGetBackStatus(long lID,long lStatus);<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;HICON m_hIcon;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//受保护的方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void MyReleaseAll();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual BOOL DestroyWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 生成的消息映射函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual BOOL OnInitDialog();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg HCURSOR OnQueryDragIcon();<BR>&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnTcnSelchangeContent(NMHDR *pNMHDR, LRESULT *pResult);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnTcnSelchangingContent(NMHDR *pNMHDR, LRESULT *pResult);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnReConnect();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnDisConnect();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnSetup();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnExit();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnTimer(UINT_PTR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg LRESULT OnIconNotify(WPARAM, LPARAM);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnSysCommand( UINT, LONG );<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBnClickedCheck1();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBnClickedMysend();<BR>};<BR><BR>这是错误的<BR>// RealcomDlg.h : 头文件<BR>//<BR><BR>#pragma once<BR>#include &#34;spClientEvents.h&#34;<BR>#include &#34;Mydo.h&#34;<BR>// CRealcomDlg 对话框<BR>class CRealcomDlg : public CDialog<BR>{<BR>// 构造<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRealcomDlg(CWnd* pParent = NULL);&nbsp;&nbsp;&nbsp;&nbsp;// 标准构造函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;//界面<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDialog m_dlgGet;CDialog m_dlgStatus;CDialog m_dlgSend;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTabCtrl * m_ptcShow;int m_nTest;BOOL m_bLiaoSend;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CListCtrl * m_plcStatus;CListCtrl * m_plcGet;CListCtrl * m_plcSend;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//设置数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataName;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataUID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strDataPWD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNUID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strUNPWD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOIP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOUID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString m_strMOPWD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//注册表项是否为空(决定程序是否初始化)<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL m_bHavaInit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//状态栏<BR>&nbsp;&nbsp;&nbsp;&nbsp;NOTIFYICONDATA m_tnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//时钟,数据库,服务器连接<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL m_bTimer1,m_bTimer2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;_ConnectionPtr m_pConn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL m_bUNConn,m_bMOConn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IspClient * m_ispClientUN;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IspClient * m_ispClientMO;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CspClientEvents m_esUN;DWORD m_desUN;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CspClientEvents m_esMO;DWORD m_desMO;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMydo m_do;<BR>// 对话框数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;enum { IDD = IDD_REALCOM_DIALOG };<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void DoDataExchange(CDataExchange* pDX);&nbsp;&nbsp;&nbsp;&nbsp;// DDX/DDV 支持<BR><BR><BR>// 实现<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;//公共的方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;//处理客户事件响应<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp0(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp1(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp2(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyStatusDisp3(UINT uIsUN,unsigned long&nbsp;&nbsp;nStatus);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyReceiveMsg(UINT uIsUN,CString source,CString destination,CString service,long msgfmt,CString cmd,long len,CString msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySendResp(UINT uIsUN,unsigned long result,unsigned long seqid);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//连接相关<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConnUN();<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConnMO();<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConnData();<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyConn();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyDisConn();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//数据处理<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySend();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyGetBack(long lID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyGetBackStatus(long lID,long lStatus);<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;HICON m_hIcon;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//受保护的方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void MyReleaseAll();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual BOOL DestroyWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 生成的消息映射函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual BOOL OnInitDialog();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg HCURSOR OnQueryDragIcon();<BR>&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnTcnSelchangeContent(NMHDR *pNMHDR, LRESULT *pResult);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnTcnSelchangingContent(NMHDR *pNMHDR, LRESULT *pResult);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnReConnect();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnDisConnect();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnSetup();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnExit();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnTimer(UINT_PTR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg LRESULT OnIconNotify(WPARAM, LPARAM);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnSysCommand( UINT, LONG );<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBnClickedCheck1();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBnClickedMysend();<BR>};<BR><BR>注意:只是BOOL m_bLiaoSend;的位置不一样。其它地方完全一样。RealcomDlg.cpp没变。CMydo也没变。结果是后者m_do释放内存失败。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金沐灶 回复日期:2003-10-25 18:55:46
<br>内容:释放内存的代码是这样:(释放过程序没错,这个函数是正常运行的,错在这个函数退出后)<BR>void CRealcomDlg::MyReleaseAll()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//关闭<BR>&nbsp;&nbsp;&nbsp;&nbsp;Shell_NotifyIcon(NIM_DELETE,&amp;m_tnd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_bHavaInit)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_do.MyRealeaseAll();<BR>&nbsp;&nbsp;&nbsp;&nbsp;MyDisConn();<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m_bTimer2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KillTimer(2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bTimer2=FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//释放<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pConn.Release();<BR>&nbsp;&nbsp;&nbsp;&nbsp;HRESULT hr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IConnectionPointContainer&nbsp;&nbsp; *pCPC = NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IConnectionPoint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pCP = NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr=m_ispClientUN-&gt;QueryInterface(IID_IConnectionPointContainer, (void **)&amp;pCPC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr = pCPC-&gt;FindConnectionPoint(DIID_IspClientEvents, &amp;pCP);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pCPC-&gt;Release();pCPC=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr = pCP-&gt;Unadvise(m_desUN);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pCP-&gt;Release();pCP=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr=m_ispClientMO-&gt;QueryInterface(IID_IConnectionPointContainer, (void **)&amp;pCPC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr = pCPC-&gt;FindConnectionPoint(DIID_IspClientEvents, &amp;pCP);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pCPC-&gt;Release();pCPC=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr = pCP-&gt;Unadvise(m_desMO);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pCP-&gt;Release();pCP=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_ispClientUN-&gt;Release();<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_ispClientMO-&gt;Release();<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>
回复者:lijb 回复日期:2003-10-25 21:18:43
<br>内容:IConnectionPointContainer&nbsp;&nbsp; *pCPC = NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IConnectionPoint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pCP = NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr=m_ispClientUN-&gt;QueryInterface(IID_IConnectionPointContainer, (void **)&amp;pCPC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hr = pCPC-&gt;FindConnectionPoint(DIID_IspClientEvents, &amp;pCP);<BR>你建立COM对象,是不是要初始化一下,还有是不是要注意一下它的生命域。(不好意思,我的COM只学了一点)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金沐灶 回复日期:2003-10-25 21:58:04
<br>内容:不是这里的问题,这些地方是完全没问题的。初始化在另一个函数里。是m_do释放内存错,m_do。注意我的问题,同样的函数,同样的变量,但前者对,后者错。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金沐灶 回复日期:2003-10-26 13:41:45
<br>内容:出错的地方是m_do析构时,m_do里有一个CMapStringToPtr对象,这个对象析构出错,如果里面有元素,是DestructElement出错,我查帮助,这个方法什么也不做,看来它错了.如果没元素,也会出错,都是内存写错误.这个对象析构怎么会出错呢,奇怪.<BR>今天没上班,明天把m_do的初始化和释放代码给出来,大家一定帮帮忙哦.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金沐灶 回复日期:2003-10-26 20:35:25
<br>内容:CMydo是这样<BR>#pragma once<BR>class HnParamContent<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;HnParamContent(void)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~HnParamContent(void)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString name;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CStringArray value;<BR>};<BR><BR>class BackContent<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;BackContent(void)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~BackContent(void)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;&nbsp;&nbsp;&nbsp;intro;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString format;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString content1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString content2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString content3;<BR>};<BR><BR>class CMydo<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMydo(void);<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~CMydo(void);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//属性<BR>&nbsp;&nbsp;&nbsp;&nbsp;_ConnectionPtr m_pConn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;long m_lHour;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMapStringToPtr m_mapParam;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMapStringToPtr m_mapBack;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyRealeaseAll();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyGet();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyInit();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyOntime();<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySendUL(LPCTSTR strSource,LPCTSTR strDest,LPCTSTR strServiceid,CString strContent,long lFeetype,long lFeevalue,long lMFlag);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySendUnion(LPCTSTR strSource,LPCTSTR strDestination,LPCTSTR strServiceid,LPCTSTR strContent,long lFeetype,long lFeevalue,long lMtflag);<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyBackLiao(CString strUserID,CString strContent,CString strLiaoID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyLiaoEvent(CString strEvent,CString strUserID,CString strNiName,CString strLiaoID,CString strContent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyBackSay(CString strMobileCode,CString strSrcID,CString strDestMobileCode,CString strDestID,CString strCoTemp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyBuild(CString strMobileCode,CString strSrcID,long lSrcID,CString strDestMobileCode,CString strDestID,long lDestID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MySay(CString strContent,BOOL bIsUnion,CString strMobileCode,CString strDest);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyUpdateDate(CString strMobileCode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyUpdateSearch(CString strMobileCode,CString strSortCommand,long lPage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString MySearch(CString strSelectCommand,CString strSortCommand,long &amp; lPage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyReg(CString strContent,BOOL bIsUnion,CString strMobileCode,CString strDest);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyUpdateReg(CString strContent,BOOL bIsUnion,CString strMobileCode,CString strDest);<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD GetArrayFromString(CString strSrc,TCHAR cSplit,CStringArray * aDest);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void GetMapFromString(CString strSrc,TCHAR cSplit,CMapStringToString * mapDest);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void MyJFOnMonth(CString strCurDate,BOOL bIsUnion);<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL MyDeleteCust(CString strCurDate);<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>
回复者:金沐灶 回复日期:2003-10-26 20:38:40
<br>内容:CMydo的初始化和释放代码是这样:<BR>void CMydo::MyInit()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pConn=((CRealcomDlg *)AfxGetMainWnd())-&gt;m_pConn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_lHour=25;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HnParamContent * m_pHPC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pHPC=(HnParamContent *)new HnParamContent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pHPC-&gt;name=&#34;性别&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pHPC-&gt;value.Add(&#34;女&#34;);m_pHPC-&gt;value.Add(&#34;男&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_mapParam[&#34;B&#34;]=m_pHPC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;BackContent * pBC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;long lState;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pConn-&gt;get_State(&amp;lState);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(lState!=adStateOpen)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;_variant_t varTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString strTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;_RecordsetPtr MySet2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySet2.CreateInstance(__uuidof(Recordset));<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySet2-&gt;Open(&#34;select * from 返回内容&#34;,m_pConn.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(!MySet2-&gt;EndOfFile)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBC=(BackContent *)new BackContent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varTemp=MySet2-&gt;GetCollect(&#34;标志&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_VT(&amp;varTemp)!=VT_NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTemp=(TCHAR *)_com_util::ConvertBSTRToString(V_BSTR(&amp;varTemp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_mapBack.SetAt(strTemp,pBC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varTemp=MySet2-&gt;GetCollect(&#34;说明&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_VT(&amp;varTemp)!=VT_NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTemp=(TCHAR *)_com_util::ConvertBSTRToString(V_BSTR(&amp;varTemp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBC-&gt;intro=strTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varTemp=MySet2-&gt;GetCollect(&#34;格式&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_VT(&amp;varTemp)!=VT_NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTemp=(TCHAR *)_com_util::ConvertBSTRToString(V_BSTR(&amp;varTemp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBC-&gt;format=strTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varTemp=MySet2-&gt;GetCollect(&#34;内容一&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_VT(&amp;varTemp)!=VT_NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTemp=(TCHAR *)_com_util::ConvertBSTRToString(V_BSTR(&amp;varTemp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBC-&gt;content1=strTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varTemp=MySet2-&gt;GetCollect(&#34;内容二&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_VT(&amp;varTemp)!=VT_NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTemp=(TCHAR *)_com_util::ConvertBSTRToString(V_BSTR(&amp;varTemp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBC-&gt;content2=strTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varTemp=MySet2-&gt;GetCollect(&#34;内容三&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_VT(&amp;varTemp)!=VT_NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTemp=(TCHAR *)_com_util::ConvertBSTRToString(V_BSTR(&amp;varTemp));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBC-&gt;content3=strTemp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySet2-&gt;MoveNext();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>void CMydo::MyRealeaseAll()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString strKey;void * pHPC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;POSITION pos=m_mapParam.GetStartPosition();<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(pos)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_mapParam.GetNextAssoc(pos,strKey,pHPC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete (HnParamContent *)pHPC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;pos=m_mapBack.GetStartPosition();<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(pos)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_mapBack.GetNextAssoc(pos,strKey,pHPC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete (BackContent *)pHPC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pConn.Release();<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>
回复者:金沐灶 回复日期:2003-10-26 20:45:51
<br>内容:另外,忘了说,CMydo的构造函数和析构函数是空的。以上两个函数被CRealcomDlg初始化和释放时调用。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -