游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3327|回复: 11

建立??B?度的二??列?K?⑺?性?卦O定??

[复制链接]

414

主题

611

帖子

621

积分

高级会员

Rank: 4

积分
621
发表于 2007-5-11 01:09:00 | 显示全部楼层 |阅读模式
建立??B?度的二??列?K?⑺?性?卦O定??
m_nHeight?m_nWidth??nt的?抵??????
我用以下的方法,?绦??霈F??,正????如何??呢?

unsigned char** image_mark=NULL;//找?的或是黑的
image_mark=new unsigned char*[m_nHeight];

for (int j=0;j<m_nHeight;j++)
{
image_mark[j]=new unsigned char[m_nWidth];
memset(image_mark[j],0,sizeof(image_mark[0])*m_nWidth);
}

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-11 09:24:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

memset(image_mark[j],0,sizeof(image_mark[0])*m_nWidth);
这句的 sizeof(image_mark[0])*m_nWidth 有问题,sizeof(image_mark[0])换成sizeof(char)就没问题了。
在我机器上,把 m_nWidth 设为 5 时,sizeof(image_mark[0])得到的是 4,而不是我想的 5,有疑问。
why?

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-5-11 09:54:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

sizeof对于分配在堆上的空间是不能识别其长度的,sizeof(image_mark[0])得到的是指针类型的地址空间长度,不是指针指向的地址空间长度。

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-5-11 10:20:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

lz的sizeof掌握的不好。sizeof是返回给定类型的大小,你给的指针,32位平台上,自然返回的是指针的长度4

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-11 12:14:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

哦,就是,我确实理解有问题。
领教了,谢谢。

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-5-11 12:16:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

1动态数组尽量用std::vector来做,
std::vector<std::string>
2尽量不要用memset这种算法
可以考虑 std::fill来实现

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-5-11 12:21:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

sizeof(&image_mark[0])

这么用成不……我是烂鸟,鄙视我吧 - -

恩,努力全面进入STL时代  [em23]

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2007-5-11 15:03:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

memset也没什么不好的。。。

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-11 18:27:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

sizeof(&image_mark[0])?
不能这样用,我刚试了,还是得到 4。用上面3、4楼说明的理论很容易解释,还是一个指针数据的大小:4字节。
memset么,一般般,填充 32 位字用
_asm{
     mov edi,pData // pData为数据指针
     mov ecx,DataLen // 数目
     mov eax,0 // 或 xor eax,eax
     rep stosd // 填充 0
}
这个更快。抄自《游戏编程大师技巧》

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2007-5-14 01:30:00 | 显示全部楼层

Re:建立??B?度的二??列?K?⑺?性?卦O定??

要求这么高。。竟然连memset都不能胜任。啥场合啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 09:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表