我写了以下一段代码,目的是按一定间隔覆盖一个BYTE数组内的内容
         
          BYTE * pLine = new BYTE[1400];
  long mCount = 1400;
BYTE newValue = (mCount++ % 3 == 0) ? 0xFF : 0;
         //设置newValue 的值为255或者0
for (int i = 0; i < 16; i++)
{
if(i % 2 ==0)
{
                  memset(pLine, newValue,24);
                  //每次填充24字节
}
pLine += 24;
                  //指针移动24字节

}

这样一来,在我设想中,pLine指向的变量,应该是被按照一定间隔填充了FF和0的,但实际情况却不是如此,我哪里想错了吗?

解决方案 »

  1.   

    问题太多了
    首先忘记赋初值了
    memset(pLine ,0 ,1400);mCount开始应该=0,循环里应该++24*16  也不过才操作了几百个字节 ?   1400  ?
      

  2.   

    不用赋值吧, 给分配的空间,BYTE数组自动填充为CD,你调试看看最终是否填充满不重要,重要的是实现和目的一样的效果,比如我想形成
    FF FF FF FF FF FF CD CD CD CD CD CD 00 00 00 00 00 00 这样的效果
    但问题是,我写的这段程序,最终输出的是00000270h: CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD FD ; 屯屯屯屯屯屯屯妄
    00000280h: FD FD FD 0D F0 AD BA AB AB AB AB AB AB AB AB 0D ; ?瓠韩?
    00000290h: 0A              
    换句话说只有BYTE指针最后的数据变化了,为什么会这样?
      

  3.   

    多半是你自己把pLine给加了,又去看pLine的内容。要么你应当看pLine - 24*16的内容,要么你分配内存后保存个指针。还有给分配的空间自动填充为CD的是debug版本,release版本啥也不会填的,要当心。
      

  4.   

    自己把pLine给加了,又去看pLine的内容。这句话怎么理解?
      

  5.   

    你只在i能整除2的时候填充了。
    而且你每次都对pLine进行加运算。那最后一次填充后,pLine已经指到申请到的内存的尾部了。你又怎么能看到你真正填充的数据呢??
    最后你连申请的内存都没办法释放。
    用这段代码试试:
    BYTE * pLine = new BYTE[1400];
    BYTE * ptr=pLine;
      long mCount = 1400;
    BYTE newValue = (mCount++ % 3 == 0) ? 0xFF : 0;
             //设置newValue 的值为255或者0
    for (int i = 0; i < 16; i++)
    {
    if(i % 2 ==0)
    {
                      memset(ptr, newValue,24);
                      //每次填充24字节
    }
    ptr += 24;
                      //指针移动24字节

    }
    delete [] pLine;