作者:手机用户2702935165 | 来源:互联网 | 2023-09-09 18:12
我有一个串口通讯程序,它向串口写数据后等待对方传回数据,再返回该传回的数据,如果只运行几次,没有问题,如果多次运行,会出现如下问题:debugAssertionFailed.Progr
我有一个串口通讯程序,它向串口写数据后等待对方传回数据,再返回该传回的数据,
如果只运行几次,没有问题,如果多次运行,会出现如下问题:
debug Assertion Failed.
Program :E:\my.exe.
File:dbgheap.c
Line:1017
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information on how your program can cause
An assertion failure,see the Visual C++ document on assert
我想是关于断言的问题,但该问题具体是什么引起的??
欢迎大家发言,发言的都有分.
19 个解决方案
你是不是使用多线程来收发串口数据,如果是的话,在使用多线程的时候,有没有控制住对共享资源的同步和互斥问题,这种情况一般是由于你申请了一块内存用来存放收到的串口数据,然后在第二次使用之前把这些内存释放掉了。可以参考临界区加以控制,另外,不要动态申请内存,可以静态的申请一个大一点的数组。现在内存很便宜,多申请一点没有坏处。
buffer的容量可能已经达到最大限度了,你应当在每次发过后就清空buffer,这样就不会有问题,而且发送到串口的也才是你自己真正想要得到的数据。
to largebeard(潇潇):
buffer应该不会溢出,我把输入、输出缓冲区都设为2048,而我发一次数据才几十字节,每次发完数据,都会等读到输入区数据后才会再发。应该不会吧。
to superaf(阿斐):
你是说WriteFile(写串口)后要清空输出缓冲区吗?我觉得不需要,数据发完后缓冲区不是自动清空了吗?
如果你是在线程中申请的buffer ,那么在线程退出前应该释放内存空间
to mosquitosj(蚊子):
我是用的new char和定义的字符数组,它需要在退出时释放吗?
另外大家说的buffer是指串口的缓冲区还是指程序定义的?
大家说的buffer溢出,是指串口的还是自己定义的?
我定义了很多buffer,如何判断是那一个溢出呢?
可能是串口堆溢出。 用PurgeComm清空缓存。
是串口的buffer,你能不能指出那句出错,单步跟踪一下
我跟了,看不到.
如果是串口的buffer,那是为什么?
我每次发送的数据量很小呀!而且readfile和writefile都会自动清空缓存,是吗?