我在控制台中定义一个结构 struct
{
PVOID a;
DWORD b;
}add;
我想用memcpy直接将 add.b的值复制到add.a上 但是不知道为什么 总是会出现内存异常 求教各位大牛  小弟刚学习C++..

解决方案 »

  1.   

    我也是新手,说说我的想法,错了别怪我哈,只希望可以抛砖引玉想问你为add.a分配了内存吗?没分配的话MEMCPY过去肯定出错啊,我加了一句add.a=new DWORD;
    之后,程序时正常的,看看是不是你的情况
    #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;
     }
      

  2.   

    不清楚你怎么调用memcpy的。如上所说,很可能的问题是你没有为a分配空间。
      

  3.   

    注意这两种写法的区别:
    add.a是指针,add.b是DWORDmemcpy(&add.a,&add.b,sizeof(DWORD));
    memcpy(add.a,&add.b,sizeof(DWORD));第一个不会出错,这个把add.a当做一个数来用了,虽然运行正确,但建议不要这样用这二个会出错,因为a是指针但是a并没有指向任何存储空间,你要先给a分配内存
      

  4.   

    找memcoy的说明,网上说的明白
      

  5.   


    正解,这个可能是你没分配内存就直接拷贝了,当然会出现内存错误,另外,你用 memcpy 拷贝时,可以用 sizeof()来确定你要拷贝的数据长度。这个长度不对也会导致内存错误的
      

  6.   

    抱歉 刚睡醒..我是定义add.a = (PVOID)0x00400000;然后add.b = 520; 然后把520拷贝到(PVOID)0x00400000 
      

  7.   

    只是想把拷贝完的数据通过DeviceIoControl传给驱动罢了 
      

  8.   

    找memcoy的说明,网上说的明白
      

  9.   


    这个有道理,你是想把add.b拷到指定的内存地址,可能系统对这块内存有保护,不让你写数据。