我们都知道在32位的cpu的系统上,我们的指针的长度为 4 byte。在一些32位的cpu系统上,如果:
unsigned char * pData;
pData = (unsigned char * ) malloc( Length *sizeof(unsigned char ));
if (pData)
{
printf("malloc fialed /n");
return 0;
}
memset(pData,0,Length *sizeof(unsigned char ));
……
int test = 1234;
(unsigned long *) (pData + 50) = test ;//some cpu think it error
//if you write it to :memcpy(pData+50,&test,sizeof(test));any cpu think ok.
……
看到这里我们应该明白:如果我们我们在对某个地址指针在进行赋值是,我们要保证我们的左值地址为4 的整数倍(这是对于32位cpu而言的,如果为64位则应为8的整数倍),当燃了,如果pData + 40 ,但是pData 却不为4的整数倍那也不对,我们是要保证他们的和为4的整数倍。如果我们用memcpy 的话,就不存在这样的问题了,应为我们是一byte一byte赋值的。
其实,我们现在的很多cpu 已经在意我的第一种写法了,可是前日子就遇到了这样的问题,但是还百思不得其解,还认为我的那块开发板子犹未提,后来才知道是自己经验不足,太无知了。如果你也遇到这样的问题时,千万不要怀疑你的环境,那是我们无知造成的后果。
哈哈^0^