关于指针和内存泄漏,我有点不太明白

cgh6697067 2006-06-21 11:18:11

串口通讯的接收程序,在处理接收的函数中new了一个字符串指针来
保存接收的数据
char *lpSwitchRcvBuffer=new char[4096];
当串口不停的接收数据时,可以看到内存不停上涨,发送端串口如果停止不
发数据,内存的使用数量也不会降下来,只是停止不涨
于是我在函数的结尾处delete lpSwitchRcvBuffer,出现错误框:
Debug Error!
Program:D:\test\debug\test.exe
DAMAGE:after Normal block(#125) at 0x0003COFO
(Press Retry to debug the application)
...全文
223 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
折腾_苏州 2006-06-21
  • 打赏
  • 举报
回复
::ZeroMemory(lpSwitchRcvBuffer,strlen(lpSwitchRcvBuffer));
=============>>>>
::ZeroMemory(lpSwitchRcvBuffer,4096); OK???
一剑 2006-06-21
  • 打赏
  • 举报
回复
char *lpSwitchRcvBuffer=new char[4096];
char * p = lpSwitchRcvBuffer;
.......
你的运算:
如p[curpos]=myvar[i]
.......


delete[] lpSwitchRcvBuffer;
Mr_Ldh 2006-06-21
  • 打赏
  • 举报
回复
::ZeroMemory(lpSwitchRcvBuffer,strlen(lpSwitchRcvBuffer));
你要保证lpSwitchRcvBuffer是以null结尾,且没有溢出。
cgh6697067 2006-06-21
  • 打赏
  • 举报
回复
1、是在同一个函数里new和delete,就是在这个接收函数里,函数一开始就new
2、delete已经改成delete []lpSwitchRcvBuffer了
3、没有做指针移位的操作
4、函数中间有做一次这样的操作:
::ZeroMemory(lpSwitchRcvBuffer,strlen(lpSwitchRcvBuffer));
不知道是否有影响?
Mr_Ldh 2006-06-21
  • 打赏
  • 举报
回复
"lpSwitchRcvBuffer[curpos]=myvar[i]"这没有改变lpSwitchRcvBuffer的值,不会有问题。
你的new与delete是在同一个模块中吗?不能在一个DLL中new,而在另一个DLL中delete.
折腾_苏州 2006-06-21
  • 打赏
  • 举报
回复
delete lpSwitchRcvBuffer;只释放了一个char,应用delete []lpSwitchRcvBuffer;

还有lpSwitchRcvBuffer指向的值可以改变,但指针的位置不要移动,如果移动了,释放的时候要再移到开始0的位置。。如中途 :lpSwitchRcvBuffer = lpSwitchRcvBuffer + 100;
释放的时候:

lpSwitchRcvBuffer = lpSwitchRcvBuffer - 100;
delete []lpSwitchRcvBuffer;
cgh6697067 2006-06-21
  • 打赏
  • 举报
回复
lpSwitchRcvBuffer的值我处理过程是要改变的,有些如lpSwitchRcvBuffer[curpos]=myvar[i]
之类的语句,但是这是必须要的,怎么办?
我delete改成你的方式,还是一样的错误
Mr_Ldh 2006-06-21
  • 打赏
  • 举报
回复
delete []lpSwitchRcvBuffer;
另外不要改变lpSwitchRcvBuffer值,如不要:lpSwitchRcvBuffer++;
cgh6697067 2006-06-21
  • 打赏
  • 举报
回复
该怎么处理我上面的问题?
madmanahong 2006-06-21
  • 打赏
  • 举报
回复
内存tag被破坏了

16,551

社区成员

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

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

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