C/C++超級需要注意的容易引起的Bug

來源:互聯網
上載者:User

* . RCacheManage::Struct_Msg structmsg;

     structmsg = *(Struct_Msg*)buf;

注意啦,如果結構體裡面存在指標類型的東東,這樣賦值就好像在有指標成員的類中進行 淺拷貝一樣,那麼就不能成功。

 因此 ,要解決這個問題,我們需要把結構體中的每個成員變數來一一的賦值:如:

     strcpy(structmsg.strtime,((RCacheManage::Struct_Msg*)bufEnd)->strtime);

這樣子,就不會出什麼錯誤了。  ;:: 我靠,這個錯誤害我找了半天哦。真實腦殘了,還以為自己指標運算出了錯呢,,唉!其實我們應該Bug來調式這個指標,看記憶體中值的問題。

*. 有個Bug始終未解決:是有關檔案讀寫的:

以二進位方式寫入:先寫入一個,結構體,再寫入一串字串,然後寫入一個unsigned char 類型的Oxff字元(用作分隔)

結構體如下:

typedef struct Msg //這個結構體就按照這個樣子編排順序了,因為亂編排會導致讀取資料不準確,搞不懂。
{
char strtime[20];//日期
int mode;//模式
bool isReceive ;//是否接收方,true ; 發送資訊方,false
}Struct_Msg;

字串是不定長的; 最後再寫個Oxff字元進去。

問題就出來了:當我讀取的時候,結構體中的 mode有時候與寫入進去的值不一樣:比如寫入時mode = 0; 讀出確實1326。。。。怎麼搞的呢?求解。

解決:貌似也不是順序問題:而是讀取出來,最好不要使用指標轉換的方式,而應該使用固定大小的讀取方式讀。讀多少。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.