串口程序,出现debug assertion failed

glacier123 2011-09-14 04:12:01
使用MSComm控件做的一个读串口数据,进行分析的小程序,但数据是实时大量数据,持续接收的。
直接运行程序正常,但在界面被网页或其他程序覆盖或显示时,弹出“debug assertion failed”.点“忽略”,则可以继续使用软件。

as following:
````````````````````````````````````````````````````````
Debug Assertion Failed!

Program: ..path...\xxxx.exe
File:afxole.inl
Line:277

For information on how your program can cause an assertion failure, see the visual c++ documentation on asserts.



:查看堆栈,怀疑是COleSafeArray类型变量的问题, 大侠们给予指点,谢谢了!
...全文
327 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
诶呦 2011-09-15
  • 打赏
  • 举报
回复
m_strEditRXData += strtemp;而且你是不是在一直给这个变量+值,如果不定时清空CPU利用率会很高.
你是怎么处理数据的?画图?文本显示?还是……
glacier123 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jodan179 的回复:]
按楼主的描述,感觉问题与OnComm() 关系不大,到是在onpain 中的问题。可以测试去掉OnComm是否会有问题。
[/Quote]

如果程序停止接收数据,就不会有问题
glacier123 2011-09-15
  • 打赏
  • 举报
回复
在程序崩掉之前,能看到TOTAL值增加了
glacier123 2011-09-15
  • 打赏
  • 举报
回复
rentao325@qq.com
非常感谢~~
诶呦 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 glacier123 的回复:]
可恶的是,当其他窗口(如网页),最大化或最小化变化时,程序就出现这个毛病
[/Quote]
我知道了,你下个GDI查看的软件,看一下的资源是否释放,我遇到过这个问题,最大最小化后,OnPaint()重绘,又会重新申请资源,导致资源占用的越多。你留个邮箱我给你发个GDIIndicator。
jodan179 2011-09-15
  • 打赏
  • 举报
回复
按楼主的描述,感觉问题与OnComm() 关系不大,到是在onpain 中的问题。可以测试去掉OnComm是否会有问题。
glacier123 2011-09-15
  • 打赏
  • 举报
回复
可恶的是,当其他窗口(如网页),最大化或最小化变化时,程序就出现这个毛病
诶呦 2011-09-15
  • 打赏
  • 举报
回复
void CDisplacemenSysDlg::OnComm() 
{
// TODO: Add your control notification handler code here
VARIANT Input;
CString strTemp;
long k;
int len=0;
COleSafeArray OleArray;//构造一个任何类型的空数组.
BYTE rxdata[1024];
switch(m_ctrlComm.GetCommEvent())
{
case 2:
Input=m_ctrlComm.GetInput(); //读缓冲区
OleArray=Input;//VARIANT型变量转换为ColeSafeArray型变量
len=OleArray.GetOneDimSize();//获取接收到的字符数.也可使用m_com.GetInBufferCount()获取字符数.

for(k=0;k<len;k++)
OleArray.GetElement(&k,rxdata+k);//将OleArray数组中第K个元素赋予BYTE数组中第K个元素.
//处理函数
break;
default:
break;
}
UpdateData(FALSE);
}
诶呦 2011-09-15
  • 打赏
  • 举报
回复
内存不断增长,应该是程序自身的问题,跟用什么没有关系
glacier123 2011-09-15
  • 打赏
  • 举报
回复
应该是 COleVariant myVar;
COleSafeArray safearray_inp;
这两个类型变量的问题,先调用COleVariant 的析构函数,而后再调用COleSafeArray的析构函数时,出现了空指针
之前代码用的是VARIANT variant_inp;类型,但它会导致程序内存不断增长才改用COleVariant myVar;
不想又出现这个问题,不知我的理解是否正确,高手帮忙看看怎么解决好
glacier123 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 xianglitian 的回复:]
你是不是跨线程操作GDI对象了
[/Quote]
没有用多线程,最后在echoyin59(战个痛快) 的帮助下,修改了设备的波特率,就没有这个问题了,可能是数据量太大了,虽然不太圆满,至少有个折中的办法吧
向立天 2011-09-15
  • 打赏
  • 举报
回复
你是不是跨线程操作GDI对象了
诶呦 2011-09-15
  • 打赏
  • 举报
回复
657364656
诶呦 2011-09-15
  • 打赏
  • 举报
回复
要不你把程序发过来我帮你看看
glacier123 2011-09-15
  • 打赏
  • 举报
回复
启动程序后,在OnPaint(); 中加断点,最大最小化其他窗口,直接弹出断言提示
即使进入,也是直接调用 CDialog::OnPaint();
debug输出,Warning: constructing COleException, scode = E_INVALIDARG ($80070057).
比较可疑,
请问你以前遇到这中情况(最大最小化其他窗口,程序出错)怎么解决的?
诶呦 2011-09-15
  • 打赏
  • 举报
回复
那就是重绘的问题,OnPaint()中看看
他报的什么错
glacier123 2011-09-15
  • 打赏
  • 举报
回复
其他窗口最大化,最小化的时候,我的接收程序报错
诶呦 2011-09-15
  • 打赏
  • 举报
回复
那你现在的问题是什么
glacier123 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 echoyin59 的回复:]
m_strEditRXData += strtemp;而且你是不是在一直给这个变量+值,如果不定时清空CPU利用率会很高.
你是怎么处理数据的?画图?文本显示?还是……
[/Quote]
我是将收到的数据包,转换后编程十进制数,不停的在文本框显示,每一时刻只有一个值,但刷新频率比较快
诶呦 2011-09-14
  • 打赏
  • 举报
回复
debug调试 出现错误时点重试,进入到错误命令行,看是什么报错。然后再解决
加载更多回复(4)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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