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