BREW程序中記錄結構沒對齊導致手機上無故死機

手機客戶端從服務器下載了一些結構化的數據,本想偷個懶,直接通過結構指針指向內存流來進行讀寫,結果在模擬器上沒問題,一裝到手機上就死機,找了好......久才確定爲結構對齊導致的問題: 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....

發佈了29 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章