CString类异常,哪位高人遇见过?

hfcarrey 2011-05-05 03:50:22
程序中使用串口传输文件,文件大小40-50KB不等,自己定义的通信协议(数据头/数据长度/数据信息等/数据尾),在串口接收过程中一个字节一个字节的进行判定,并将接收到的字节转换为16进制保存到CString对象中.CString 的数据长度在最大超过2048.程序一般执行都正常.
但有时候会在出现Access violation 的异常,跟踪代码到CString中.显示是FreeData(CStringData* pData)函数中
delete[] (BYTE*)pData; 代码段出现的问题.用bounds checker检查是
错误:
Invalid argument
operator delete handle:0x02486A20
Bad handle

哪位高人遇到过这种情况,该如何处理?不胜感激!
...全文
117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2011-05-10
  • 打赏
  • 举报
回复
就使用一个数组就行了,用cstring就是易出错。
hfcarrey 2011-05-10
  • 打赏
  • 举报
回复
多谢各位,CString没跨线程使用.CString在长度大于512字节后,其内存管理出现问题,在Release时候,引用出现了问题,现在修改为BYTE数组方式.问题解决.谢谢各位!
bragi523 2011-05-06
  • 打赏
  • 举报
回复
1:有可能线程同步没做好
2:Cstring的机制是,每次都改变成都都去重新分配地址,重新拷贝,效率低下,且容易出错
chenjiawei007 2011-05-06
  • 打赏
  • 举报
回复
为什么Cstring使用会出现大量的问题,因为我们没时间去了解Cstring的封装,

多检查Cstring的用法,我自己除了做界面图省力还会用cstring,后台的基本不适用,


首先不了解其封装,很多用法都需要配对使用,不让CSTRING总会出错。

其次是,用了CSTRING代码移植性不好,放到LINUX下基本上不行。

如果真要用CSTRING就了解其构造,不然建议使用别的方法,记得CSTRING也仅仅是个指针而已,你放

如此大的数据,还是会遇到问题的。
  • 打赏
  • 举报
回复
线程中最好不要用MFC的类
Eleven 2011-05-05
  • 打赏
  • 举报
回复
贴相关的代码
zgl7903 2011-05-05
  • 打赏
  • 举报
回复
在多线程中访问很容易出现这种问题
一个线程读的时候,另外一个线程在写或清除

串口处理中,尤其是底层处理中个人不建议使用CString,动态的获取和释放空间,效率很低下,而且不安全,
可以在申请一块大的缓冲区,退出来之前释放即可,高效有安全
hfcarrey 2011-05-05
  • 打赏
  • 举报
回复
里面没涉及到GetBuffer.
只有该CString对象的,
sString=sString + "AA";
sString.Mid
sString.Left
sString.Delete
sString = "";
ouyh12345 2011-05-05
  • 打赏
  • 举报
回复
CString有什么操作?
GetBuffer后,把buffer删除了?

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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