memcpy使用的时候出现的内存错误

yueshengxiao 2012-03-02 02:23:01
执行的程序:memcpy(&Packet[5],rbuf,rlen-2);

把rbuf中去掉最后两位后拷贝到Packet中的第6位

定义:unsigned char *Packet(参数中)
unsigned char rbuf[40];
unsigned int rlen;
值:rbuf={8b 92 70 0a 05 14 47 3b d8 b5 9a 53 dd 5c fe 00 b4 a2 93 5f d6 df 81 85 90 00};
rlen=0x1a;

出现的错误:cos_work.exe 中的 0x100329f4 (wincos.dll) 处未处理的异常: 0xC0000005:
读取位置 0xccdfc043 时发生访问冲突

求助!看起来像是内存越界?Packet不够大?
...全文
636 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueshengxiao 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 qixing1115 的回复:]

单步调试会不,看看运行到那儿时各个变量的值是多少
[/Quote]一个疏忽...内存初始值是全c,rlen的值是0xcccccc1a...我直接无视那个ccc了...
qixing1115 2012-03-02
  • 打赏
  • 举报
回复
单步调试会不,看看运行到那儿时各个变量的值是多少
majia2011 2012-03-02
  • 打赏
  • 举报
回复
哦,那还是rlen不对,写溢出了,你打印下rlen吧
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 majia2011 的回复:]

那你看一下rbuf的指针吧,如果它是0xccdfc043,那就对了
[/Quote]不是的,rbuf的地址是:0x0012F42C,而Packet的地址是:0x004B5F98。所以很奇怪
majia2011 2012-03-02
  • 打赏
  • 举报
回复
那你看一下rbuf的指针吧,如果它是0xccdfc043,那就对了
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 majia2011 的回复:]

你确认rlen就一定小于你说的256?
[/Quote]定义的是char Packet[255];而rbuf定义的是unsigned char rbuf[40];
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复

/* Packet[5]=rbuf[0];
Packet[6]=rbuf[1];
Packet[7]=rbuf[2];
Packet[8]=rbuf[3];
Packet[9]=rbuf[4];
Packet[10]=rbuf[5];
Packet[11]=rbuf[6];
Packet[12]=rbuf[7];
Packet[13]=rbuf[8];
Packet[14]=rbuf[9];
Packet[15]=rbuf[10];
Packet[16]=rbuf[11];
Packet[17]=rbuf[12];
Packet[18]=rbuf[13];
Packet[19]=rbuf[14];
Packet[20]=rbuf[15];
Packet[21]=rbuf[16];
Packet[22]=rbuf[17];
Packet[23]=rbuf[18];
Packet[24]=rbuf[19];
Packet[25]=rbuf[20];
Packet[26]=rbuf[21];
Packet[27]=rbuf[22];
Packet[28]=rbuf[23];*/
memmove(&Packet[5],rbuf,rlen-2);

注释的部分和没注释的这句有区别吗?rlen=26。用memcpy也是错误的,但是直接一个个赋值就没有问题。求解?
majia2011 2012-03-02
  • 打赏
  • 举报
回复
你确认rlen就一定小于你说的256?
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zhao4zhong1 的回复:]

memmove
[/Quote]看来只能这样试试了
赵4老师 2012-03-02
  • 打赏
  • 举报
回复
memmove
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
理论上看起来是不应该出现错误的啊!!!悲催的程序,周五了还坑我
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 qixing1115 的回复:]

引用 17 楼 yueshengxiao 的回复:
引用 12 楼 hu7324829 的回复:

char Packet[10];
char rbuf[40] = ".........";//初始化
int rlen = sizeof(rbuf);

memcopy(&Packet[5], rbuf, 10 - 5);//只能拷贝5个过去,不然溢出

……
[/Quote]
哥,那个地方是打错了啊,我开始的做法是memcpy(&Packet[5],rbuf,rlen-2);然后另外一个哥说换成Packet+5的形式,接着我修改的时候就没去掉‘&’符号,但是去掉之后还是一样的错误
qixing1115 2012-03-02
  • 打赏
  • 举报
回复
谁交你的memcpy函数这么用
memcpy(&Packet+5,rbuf,rlen-2);
改成这样:
memcpy(Packet+5,rbuf,rlen-2);
qixing1115 2012-03-02
  • 打赏
  • 举报
回复
改成这样:
memcpy(Packet+5,rbuf,rlen-2);
qixing1115 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yueshengxiao 的回复:]
引用 12 楼 hu7324829 的回复:

char Packet[10];
char rbuf[40] = ".........";//初始化
int rlen = sizeof(rbuf);

memcopy(&Packet[5], rbuf, 10 - 5);//只能拷贝5个过去,不然溢出

在这个函数里面没有定义Packet的内存占用的大小,在调用的测试……
[/Quote]
谁交你的memcpy函数这么用
memcpy(&Packet+5,rbuf,rlen-2);
改成这样:
memcpy(Packet+5,rbuf,rlen-2);
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hu7324829 的回复:]

char Packet[10];
char rbuf[40] = ".........";//初始化
int rlen = sizeof(rbuf);

memcopy(&Packet[5], rbuf, 10 - 5);//只能拷贝5个过去,不然溢出
[/Quote]
在这个函数里面没有定义Packet的内存占用的大小,在调用的测试程序里面,定义了Packet[255],应该足够大了
yueshengxiao 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 oldm4n 的回复:]

参数列表里是 unsigned char *Packet
memcpy里面你用的是 &Packet+5
你这样做是把rubf的内容copy到一个未知的地方去了

&符号去掉
memcpy(Packet+5,rbuf,rlen-2);
[/Quote]
最开始用的是memcpy(&Packet[5],rbuf,rlen-2);在这个地方出问题,而上一层测试程序定义的Packet长度是255
qixing1115 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yueshengxiao 的回复:]
那句话原本是memcpy(Packet[5],rbuf,rlen-2);这样是会出现错误,然后我修改了下成memcpy(Packet+5,rbug,rlen-2);还是会出现错误
[/Quote]
估计你Packet所指向的变量没有分配内存
Packet = (char *) malloc(100);//多分配点试试,在调用这个函数之前要有这句话
oldm4n 2012-03-02
  • 打赏
  • 举报
回复
sorry,也不能说是未知的地方,&Packet+5 是可以计算出来的,应该说是已知的地方
不过应该不是你希望的地方
oldm4n 2012-03-02
  • 打赏
  • 举报
回复
参数列表里是 unsigned char *Packet
memcpy里面你用的是 &Packet+5
你这样做是把rubf的内容copy到一个未知的地方去了

&符号去掉
memcpy(Packet+5,rbuf,rlen-2);
加载更多回复(12)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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