如何释放BYTE型数据内存

qingfeng029 2015-03-09 09:49:34

说是内存泄露了,可我不知道哪里泄露了,是不是rxdata数组内存没释放?如果要释放怎么释放呢?代码如下
void CBeijingDlg::OnOnCommMscomm1() 
{
// TODO: Add your control notification handler code here

VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码

variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

m_ctrlComm.SetInBufferCount(0);

if(rxdata[0]==0x31)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\1.swf");
}

else if(rxdata[0]==0x32)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\2.swf");
}

else if(rxdata[0]==0x33)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\3.swf");
}

else if(rxdata[0]==0x34)
{

m_FlashPlayer.LoadMovie(0,"D:\\huagui\\4.swf");

}

else if(rxdata[0]==0x35)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\5.swf");
}

else
{

}
}
}
...全文
911 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2015-03-19
  • 打赏
  • 举报
回复

   len=safearray_inp.GetOneDimSize(); //得到有效数据长度
   BYTE *rxdata = _alloca(len); //动态分配缓冲区
lx624909677 2015-03-19
  • 打赏
  • 举报
回复
加个断点看下你读的数据的大小,应该是比你开辟的空间大了,造成了数组越界
zhangzhangdudu 2015-03-18
  • 打赏
  • 举报
回复
嗨,你好。 我也遇到同样的问题。你的问题解决了吗? 通过调试,我发现内存泄露是由于 variant_inp=m_ctrlComm.GetInput(); //读缓冲区 的执行造成的。与下面的代码没有关系。 但就是不知道如何释放variant_inp。 如果你有什么好的建议和方法,希望能共享。
悟迟 2015-03-09
  • 打赏
  • 举报
回复
貌似,COleSafeArray::GetOneDimSize是获得数组维度,返回值应该一直是1,就是一维数组,不是指数据有1个
worldy 2015-03-09
  • 打赏
  • 举报
回复
引用 8 楼 wozhaolala 的回复:
[quote=引用 7 楼 worldy 的回复:] 这个不是内存泄露,而是内存非法访问了,估计是len值大于等于2048造成内存访问越界;看你的代码len值好像没有赋值!!
不一定是BYTE rxdata[2048]数组越界 有可能是safearray_inp数组越觉了 safearray_inp.GetElement(&k,rxdata+k);第一个参数一直用0试试[/quote] 你没看他那代码,len那个参数没有初始化吗?
dong364 2015-03-09
  • 打赏
  • 举报
回复
接受缓冲区有读写事件,考虑在多线程情况下是需要加锁的
悟迟 2015-03-09
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
这个不是内存泄露,而是内存非法访问了,估计是len值大于等于2048造成内存访问越界;看你的代码len值好像没有赋值!!
不一定是BYTE rxdata[2048]数组越界 有可能是safearray_inp数组越觉了 safearray_inp.GetElement(&k,rxdata+k);第一个参数一直用0试试
worldy 2015-03-09
  • 打赏
  • 举报
回复
这个不是内存泄露,而是内存非法访问了,估计是len值大于等于2048造成内存访问越界;看你的代码len值好像没有赋值!!
悟迟 2015-03-09
  • 打赏
  • 举报
回复
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
这句话是从数组rxdata里拿数据吗?
悟迟 2015-03-09
  • 打赏
  • 举报
回复
引用 3 楼 qingfeng029 的回复:
引用 2 楼 wozhaolala 的回复:
引用 1 楼 wozhaolala 的回复:
for循环之前没检查一下循环次数是否大于数字大小
数组大小
接收的串口数据都是一个字节的,而且是几秒钟才发一个,这样也要判断吗?
无论这里是否是报错原因,必须检查;貌似0xC0000005是数组越界错误啊
qingfeng029 2015-03-09
  • 打赏
  • 举报
回复
引用 1 楼 wozhaolala 的回复:
for循环之前没检查一下循环次数是否大于数字大小
而且我调试的时候len和k的值都为1,就是只有一个数据
qingfeng029 2015-03-09
  • 打赏
  • 举报
回复
引用 2 楼 wozhaolala 的回复:
引用 1 楼 wozhaolala 的回复:
for循环之前没检查一下循环次数是否大于数字大小
数组大小
接收的串口数据都是一个字节的,而且是几秒钟才发一个,这样也要判断吗?
悟迟 2015-03-09
  • 打赏
  • 举报
回复
引用 1 楼 wozhaolala 的回复:
for循环之前没检查一下循环次数是否大于数字大小
数组大小
悟迟 2015-03-09
  • 打赏
  • 举报
回复
for循环之前没检查一下循环次数是否大于数字大小
worldy 2015-03-09
  • 打赏
  • 举报
回复
for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 改成 safearray_inp.GetByteArray试试
qingfeng029 2015-03-09
  • 打赏
  • 举报
回复
引用 11 楼 wozhaolala 的回复:
貌似,COleSafeArray::GetOneDimSize是获得数组维度,返回值应该一直是1,就是一维数组,不是指数据有1个
我分步调试的时候如果串口发两个数据,len的值就为2;发3个数据len值就为3.。。。。
qingfeng029 2015-03-09
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
[quote=引用 8 楼 wozhaolala 的回复:] [quote=引用 7 楼 worldy 的回复:] 这个不是内存泄露,而是内存非法访问了,估计是len值大于等于2048造成内存访问越界;看你的代码len值好像没有赋值!!
不一定是BYTE rxdata[2048]数组越界 有可能是safearray_inp数组越觉了 safearray_inp.GetElement(&k,rxdata+k);第一个参数一直用0试试[/quote] 你没看他那代码,len那个参数没有初始化吗?[/quote] 我试了,初始化了也一样的
qingfeng029 2015-03-09
  • 打赏
  • 举报
回复
引用 6 楼 wozhaolala 的回复:
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
这句话是从数组rxdata里拿数据吗?
应该是吧,这个串口事件代码是我从网上找的

16,548

社区成员

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

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

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