使用mscomm串口控件,VC6.0开发环境,接收图像数据(每幅大约40kB),内存增加厉害,每次大约60KB左右。
网上能找到的解决办法有
1. 把 Variant_inp = m_SetComm.GetInput(); 改为 Variant_inp.Attach(m_SetComm.GetInput());
2. 增加 VariantClear(&Variant_inp);
试了之后,都没有用。咋整?
网上能找到的解决办法有
1. 把 Variant_inp = m_SetComm.GetInput(); 改为 Variant_inp.Attach(m_SetComm.GetInput());
2. 增加 VariantClear(&Variant_inp);
试了之后,都没有用。咋整?
解决方案 »
- MiniDumpWriteDump 写的DMP文件为什么不能定位到代码
- 联系人搜索功能实现!!!!!!
- 怎么样修改CBUTTONST类控件上的文字颜色
- 求救我的DDE服务怎么运行5分钟就崩溃了?
- 关于图像显示的问题急!!!!!!
- 高分求ImageMagick相关资料
- 在MainFrame中通过new + Create创建的CMyOwnView如何正确地释放内存?
- 要《人月神话》的各路好友再这里留个电子邮件!!!!!!20号后不再受理!!
- 数据导出的问题。
- 调用一个dll的导出函数,光引入lib为什么还不够,还要把函数再声明一次?
- 传说中的Win 7 托盘图标显示问题【解决方案】
- 有做智能视频分析算法的么?
myVariant.Attach(m_SetComm.GetInput());
..............
1. 改为 Variant_inp.Attach(m_SetComm.GetInput());
2. 增加 VariantClear(&Variant_inp);
这两种方法我都试过了,没有用哎。
求解答!
Variant_inp:串口收到的数据;RecFile:要保存成的目标文件
LPSTR buffer;
BYTE *pRecBuf = NULL;
pRecBuf=(BYTE *)GlobalAlloc(GMEM_FIXED , Length); SafeArrayAccessData(Variant_inp.parray,(void **)&pRecBuf);
buffer=(LPSTR)GlobalLock((HGLOBAL)pRecBuf);
RecFile.WriteHuge(buffer, Length);
GlobalUnlock((HGLOBAL)pRecBuf);
SafeArrayUnaccessData (Variant_inp.parray); GlobalFree(pRecBuf);
buffer = NULL;
这句后pRecBuf可能已经不是原来申请的了
pRecBuf=(BYTE *)GlobalAlloc(GMEM_FIXED , Length);
这一行是没用的,造成了内存泄漏!
pRecBuf=(BYTE *)GlobalAlloc(GMEM_FIXED , Length);其它地方都不用动。
GlobalFree(pRecBuf);
if(SUCCEEDED(SafeArrayGetUBound(Variant_inp.parray, 1, &uLength))
&& uLength > 0) //获取长度
{
BYTE *pRecBuf = NULL;
if(SUCCEEDED(SafeArrayAccessData(Variant_inp.parray,(void HUGEP**)&pRecBuf)))
{
RecFile.Write(pRecBuf, uLength);
SafeArrayUnaccessData (Variant_inp.parray);
}
}