hur.cn - 华软网

 热门搜索

关于memcpy函数

  作者:未知    来源:网络    更新时间:2011/1/14
我在控制台中定义一个结构
C++">
struct
{
PVOID a;
DWORD b;
}add;


我想用memcpy直接将 add.b的值复制到add.a上 然则不知道为什么 总是会出现内存异常 求教列位大牛  小弟刚学习C++..
---华软 网友回答---
我也是新手,说说我的想法,错了别怪我哈,只希望能够抛砖引玉

想问你为add.a分配了内存吗?没分配的话MEMCPY过去肯定犯错啊,我加了一句add.a=new DWORD;
之后,程序时正常的,看看是否是你的情况

C++">
#include <stdio.h>
#include <windows.h>

struct
{
PVOID a;
DWORD b;
}add;

 int main()
 {
 add.a=new DWORD;
 add.b=84;
 memcpy(add.a,&add.b,sizeof(add.b));

 getchar();
 return 0;
 }


---华软网友回复---
不清楚你怎么调用memcpy的。如上所说,极可能的问题是你没有为a分配空间。
---华软网友回复---
注意这两种写法的区别:
add.a是指针,add.b是DWORD

memcpy(&add.a,&add.b,sizeof(DWORD));
memcpy(add.a,&add.b,sizeof(DWORD));

第一个不会犯错,这个把add.a当做一个数来用了,虽然运行正确,但建议不要这样用

这二个会犯错,由于a是指针然则a并没有指向所有存储空间,你要先给a分配内存

---华软网友回复---
极可能的问题是你没有为a分配空间。只有目的地址是个正当的内存空间才能复制的!!!
---华软网友回复---
就是,不分配空间肯定会出异常的
---华软网友回复---
找memcoy的说明,网上说的明白
---华软网友回复---
楼主要先说出你的欲望,其余人材能号脉。

---华软网友回复---
你怎么用的?贴出来看看
---华软网友回复---
new完,别忘了delete
---华软网友回复---
你的a是个无类型的指针
当然没有类型就意味着能够是所有类型
不过运用的时候就要注意自己对应详细类型
否则就容易出问题
你不说详细怎么操作的
咱们也分析不出详细原因
---华软网友回复---
引用 1 楼 rabbitlbj 的回复:
我也是新手,说说我的想法,错了别怪我哈,只希望能够抛砖引玉

想问你为add.a分配了内存吗?没分配的话MEMCPY过去肯定犯错啊,我加了一句add.a=new DWORD;
之后,程序时正常的,看看是否是你的情况


C/C++ code

#include <stdio.h>
#include <windows.h>

struct
{
    PVOID a;
 ……


正解,这个可能是你没分配内存就直接拷贝了,当然会出现内存毛病,另外,你用 memcpy 拷贝时,能够用 sizeof()来确定你要拷贝的数据长度。这个长度不对也会致使内存毛病的
---华软网友回复---
还没看到代码
---华软网友回复---
负疚 刚睡醒..我是定义add.a = (PVOID)0x00400000;然后add.b = 520; 然后把520拷贝到(PVOID)0x00400000 
---华软网友回复---
引用 13 楼 yuedayueshuiping 的回复:
负疚 刚睡醒..我是定义add.a = (PVOID)0x00400000;然后add.b = 520; 然后把520拷贝到(PVOID)0x00400000


你这是想做什么呢,那个地址你的进程有没有权限访问都不一定的
---华软网友回复---
引用 14 楼 mayudong1 的回复:
引用 13 楼 yuedayueshuiping 的回复:
负疚 刚睡醒..我是定义add.a = (PVOID)0x00400000;然后add.b = 520; 然后把520拷贝到(PVOID)0x00400000


你这是想做什么呢,那个地址你的进程有没有权限访问都不一定的

只是想把拷贝完的数据通过DeviceIoControl传给驱动罢了 
---华软网友回复---
找memcoy的说明,网上说的明白
---华软网友回复---
引用 14 楼 mayudong1 的回复:
引用 13 楼 yuedayueshuiping 的回复:
负疚 刚睡醒..我是定义add.a = (PVOID)0x00400000;然后add.b = 520; 然后把520拷贝到(PVOID)0x00400000


你这是想做什么呢,那个地址你的进程有没有权限访问都不一定的


这个有事理,你是想把add.b拷到指定的内存地址,可能系统对这块内存有掩护,不让你写数据。
---华软网友回复---
贴出代码一看究竟      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。