看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) MAC 64bit 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Xcode 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 軟體要release,因此切換到release mode做編輯和執行, 發現有一段程式碼一直錯誤, 將一個array "byte"的資料使用memcpy複製到另一個array "buf", 檢查此buf後發現,資料為0,而導致錯誤 因此用printf將array "byte"的資料輸出到螢幕上,有值而且竟然就好了! 如果byte沒經過printf就一定會出錯(buf資料為0),想不出來是什麼原因 有經過printf後,buf就會有值 餵入的資料(Input): unsigned int 預期的正確結果(Expected Output): 資料會用memcpy複製到另一個array,裡面應該有值 錯誤結果(Wrong Output): 皆為0 程式碼(Code):(請善用置底文網頁, 記得排版) unsigned int byte[4]={0}; *(long*)byte = htonl(uptime); 補充說明(Supplement): -- ˋ〃ˊ╔═╦══╦════╗ @︵@宅度0 ∵)3∵ ◢█◣  ╠══╬════╣ ▊star..█ █  魅力10000000 fuck ██ ◥█◤ ╚═╩══╩════╝ by lordwill -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.122.100 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1495177771.A.219.html
littleshan: 把陣列轉成另一個型別的指標再賦值是未定義行為 05/19 16:51
littleshan: byte[4] 應該宣告為 uint32_t,不要亂轉型 05/19 16:55