memcpy奇怪的问题

glsensor 2007-06-11 01:43:35
代码如下
UINT elemSize = 56;
UINT elemCount = 20000;
BYTE * pTmpVB = new BYTE[ elemSize * elemCount ];
float data = 1.0f;
for( UINT i=0; i < elemCount; i++ )
{
pTmpVB += i * elemSize;
memcpy( pTmpVB + 52, &data , sizeof(float) );
}


上述代码出错,报告
写入位置 0x01b10b28 时发生访问冲突

如果把elemCount改很小,例如100就不出错,1000以上就出错。关键在于for循环不能太大。

是不是memcpy在做变址寻址时,动态范围不能太大?解决办法是什么?在线等。


...全文
200 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-06-11
  • 打赏
  • 举报
回复
哎,我老啦,看了那么久才看出p += i * elemSize;的错误。

星羽 2007-06-11
  • 打赏
  • 举报
回复
这样做吧

UINT elemSize = sizeof(float);
UINT elemCount = 20000;
BYTE * pTmpVB = new BYTE[ elemSize * elemCount ];
float data = 1.0f;
BYTE* p = pTmpVB;
for( UINT i=0; i < elemCount; i++ )
{
p += i * elemSize;
memcpy( p, &data , sizeof(float) );
}
星羽 2007-06-11
  • 打赏
  • 举报
回复
UINT elemSize = sizeof(float);
UINT elemCount = 20000;
BYTE * pTmpVB = new BYTE[ elemSize * elemCount ];
float data = 1.0f;
for( UINT i=0; i < elemCount; i++ )
{
pTmpVB += i * elemSize;
memcpy( pTmpVB, &data , sizeof(float) );
}


这样看看

-------

还有,你这个拷完以后连指针都丢了- -!



  • 打赏
  • 举报
回复
是不是memcpy在做变址寻址时,动态范围不能太大?没有任何范围限制.

是你的程序 越界了,仔细看一下算法.
确定pTmpVB += i * elemSize;这里对么

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧