手機客戶端從服務器下載了一些結構化的數據,本想偷個懶,直接通過結構指針指向內存流來進行讀寫,結果在模擬器上沒問題,一裝到手機上就死機,找了好......久才確定爲結構對齊導致的問題: brew中的數據結構都是按4字節來對齊的,所以指向沒有按4字節對齊數據的結構指針會被強制對齊,所以也就不是需要的位置了,再進行讀寫就會出問題哦.解決辦法:通過內存拷備的方法來讀寫,不能偷懶!!
struct CRecFlag
{
uint16 tblno; //表號
uint16 tbltitle; //表類型
uint8 tblflag;
uint8 recnum; //記錄數
uint8 recflaglen; //字節數
uint8 recflags[1];
};
int32 i;
uint8* flaglist ; //爲內存流數據
錯誤作法:
CRecFlag* prec = (CRecFlag*)&flaglist[i];
prec->...
好的辦法:
CRecFlag rec;
MEMCPY(&rec,&flaglist[i],sizeof(rec));
rec....