http://www.cocos2d-x.org/boards/6/topics/18183?r=23985
Hi guys,
I've found problems using the CCBReader when deploying my game to an iPhone 4.
There are several potential lines in CCBReader where the game will crash due to memory misalignment.
in CCBReader::readHeader()
int magicBytes = *((int*)(this->mBytes + this->mCurrentByte));
should be
int magicBytes;
unsigned char* pData = ( this->mBytes + this->mCurrentByte );
memcpy( &magicBytes, pData, sizeof( int ) );
in CCBReader::readFloat() there is something really dangerous
float * pF = (float*)(this->mBytes + this->mCurrentByte);
float f = 0;
memcpy(&f, pF, sizeof(float));
should be
float f;
unsigned char* pData = ( this->mBytes + this->mCurrentByte );
memcpy( &f, pData, sizeof( float ) );
The ARM processor which is inside all iPhones, iPads, etc. Doesn't like memory
misalignment! so be careful doing castings with memory which could be misalignment
after the casting!
You can find more info about this issue here:
http://stackoverflow.com/questions/3243146/why-does-this-exc-bad-access-happen-with-long-long-and-not-with-int
http://stackoverflow.com/questions/7788216/exc-bad-access-and-char-pointer-to-float-pointer-cast
CCBReader内存对齐问题
本文探讨了在iPhone4上使用CCBReader时遇到的内存对齐问题,该问题导致游戏崩溃。文中详细介绍了CCBReader中可能导致内存对齐错误的代码段,并提供了修改建议以解决此问题。

被折叠的 条评论
为什么被折叠?



