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

📄 subject_50451.htm

📁 vc
💻 HTM
字号:
<p>
序号:50451 发表者:lm_2003 发表日期:2003-08-21 10:10:54
<br>主题:求助串口通讯编程造成内存泄漏!
<br>内容:串口通讯编程后运行,用WINDOWS任务管理器监控<BR>发现当串口接受数据时内存不断增加<BR>接受程序如下:<BR>CPLCCOMDlg::PLCCOMReceive()<BR>{<BR> CString&nbsp;&nbsp;&nbsp;&nbsp;m_ReadChar1;<BR> char m_COM_Read_Temp[25]="";<BR> VARIANT vReceive;//接受数据的结构<BR> unsigned char* pval;//接受数据的指针<BR> int i;<BR> int Count=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR> while(Count==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count=m_COM1.GetInBufferCount();//接受到的字符数目<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_COM1.SetInputLen(1);//设置读取字节数<BR>&nbsp;&nbsp; for(i=0;m_ReadChar1!=13;i++)//读取结束字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Count=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(Count==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Count=m_COM1.GetInBufferCount();//接受到的字符数目 <BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;vReceive=m_COM1.GetInput();//读字符<BR>&nbsp;&nbsp;&nbsp;&nbsp; pval=(unsigned char*)((vReceive.parray)-&gt;pvData); <BR>&nbsp;&nbsp;&nbsp;&nbsp; m_COM_Read_Temp[i]=pval[0];//读字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_ReadChar1=pval[0];//读字符<BR> <BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_ReceiveData=m_COM_Read_Temp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;UpdateData(FALSE);&nbsp;&nbsp;&nbsp;&nbsp; <BR>}<BR><BR>通过用将代码一行行注释掉的方法检查发现<BR>vReceive=m_COM1.GetInput();//读字符<BR>这一行代码一执行后就造成内存增加。<BR>请高手指教如何解决这问题?<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:ax 回复日期:2003-08-21 10:30:48
<br>内容:CPLCCOMDlg::PLCCOMReceive()<BR>{<BR>CString&nbsp;&nbsp;&nbsp;&nbsp;m_ReadChar1;<BR>char m_COM_Read_Temp[25]="";<BR>VARIANT vReceive;//接受数据的结构<BR>unsigned char* pval;//接受数据的指针<BR>int i;<BR>int Count=0;&nbsp;&nbsp; <BR>// 加初始化<BR>VariantInit( &amp;vReceive);&nbsp;&nbsp; <BR>while(Count==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count=m_COM1.GetInBufferCount();//接受到的字符数目<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_COM1.SetInputLen(1);//设置读取字节数<BR>&nbsp;&nbsp; for(i=0;m_ReadChar1!=13;i++)//读取结束字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Count=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(Count==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Count=m_COM1.GetInBufferCount();//接受到的字符数目 <BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;vReceive=m_COM1.GetInput();//读字符<BR>&nbsp;&nbsp;&nbsp;&nbsp; pval=(unsigned char*)((vReceive.parray)-&gt;pvData); <BR>&nbsp;&nbsp;&nbsp;&nbsp; m_COM_Read_Temp[i]=pval[0];//读字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_ReadChar1=pval[0];//读字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 释放variant<BR>&nbsp;&nbsp;&nbsp;&nbsp;VariantClear(&amp;vReceive);<BR><BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_ReceiveData=m_COM_Read_Temp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;UpdateData(FALSE);&nbsp;&nbsp;&nbsp;&nbsp; <BR>}<BR><BR><BR>// 还有从variant中取parray中的数据也不正确应该用SafeArrayAccessData函数,具体msdn.<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>
回复者:lm_2003 回复日期:2003-08-21 20:03:26
<br>内容:非常谢谢hshxf的回答!!<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 + -