我写了以下一段代码,目的是按一定间隔覆盖一个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的,但实际情况却不是如此,我哪里想错了吗?
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的,但实际情况却不是如此,我哪里想错了吗?
解决方案 »
- 我只想知道“有”还是“没有”
- 如何将属性页内嵌在SDI中
- 编程实现:鼠标双击一个文本文件时,自动删除该文件???
- MFC编写ActiveX,在属性页中如何得到控件的指针?
- 新手 vs2010静态编译出问题
- 如何在内存中播放wav和mid文件??
- crecordset 类派生的对象可以执行SQL语句吗? 我想执行这样的语句 select pzid from table1 a,table2 b where a.xm=b.bm 怎样实现青帮忙
- 有什么好方法可以把主程序框架的线程中的一个字符串(CString)传送到视图之中。
- 关于VB数据库问题
- 如何遍历读取某个目录下所有的TXT文件,求助
- 请求帮助:使用MoveFile和MoveFileEx函数转移文件失败
- [求助]debug和Release 的区别,出现的错误信息~!
首先忘记赋初值了
memset(pLine ,0 ,1400);mCount开始应该=0,循环里应该++24*16 也不过才操作了几百个字节 ? 1400 ?
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指针最后的数据变化了,为什么会这样?
而且你每次都对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;