Problems with EXC_BAD_ACCESS in CCBReader

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

posted @ 2013-11-05 14:06  卡卡之海  阅读(190)  评论(0编辑  收藏  举报