我创建了三块内存区域
buf, buf1, buf2 : pchar然后给他们分别分配空间buf  := AllocMem(8000);
buf1 := AllocMem(4000);
buf2 := AllocMem(4000);然后我给buf1,buf2分别写入了一些数据,
buf1写入了长度为offset1 = 2100的内容
buf2也写入了长度为offset2 = 2100的内容然后我调试的时候看了一下,buf1,buf2中的数据没有问题,可是当我调用copyMemory(buf, buf1, offset1);
这个时候也没有问题,buf1中的数据成功复制过来了,
但是当
copyMemory(buf+offset1, buf2, offset2);的时候出现问题,buf2的内容没有复制完全,紧紧一部分复制到了buf中我调试了一下,buf中的内容都是4095,超过的部分就没有复制过来。谁遇到过这样的问题?
求解阿!!!!
谢谢各位了~~~~

解决方案 »

  1.   

    buf+offset1就是将指针偏移,偏移量为offset1,
    就是第二次拷贝的时候,要从buf内存中的buf+offset1的指针位置开始copy,
    跨过buf1的那部分。
      

  2.   

    测试了一下,正常啊
    CopyMemory(buf, buf1, length(buf1));
    CopyMemory(buf + length(buf1), buf2, length(buf2));
    有可能是数据过长了
      

  3.   

    应该不是没有复制过去,只是可能跟你检查的机制有关系。
    使用下面的方法检测:
    copyMemory(buf+offset1, buf2, offset2); 
    ShowMessage(BoolToStr(CompareMem(Pointer(LongWord(buf)+LongWord(offset1)),buf2,offset2),True));
    如果你使用的是Delphi 2009的话,那问题就有点大了。除非把定义:
    buf, buf1, buf2 : pchar 改为:
    buf, buf1, buf2 : pAnsiChar
      

  4.   

    对了,如果是设置断点来看内存数据,数据太长了后面的不会显示,这个可能和delphi本身有关系。建议将结果写到文本文件里更直观更保险。 僵哥够牛
      

  5.   

    果然buf+offset和buf2两个指针指向的offset2长度内存区域是一样的。
    comparemem返回的是true,
    但是ctrl+f7看到的buf内容只有4096个字节。
    难道调试的时候内存里面的内容只能看到4k的东西?
    还有点疑问,在开帖子说吧~~我用的是delphi7,太谢谢僵哥了~~~谢谢各位~~