[問題] release mode下 array奇怪的錯誤

看板C_and_CPP作者 (香蕉)時間8年前 (2017/05/19 15:09), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
開發平台(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

05/19 16:51, , 1F
把陣列轉成另一個型別的指標再賦值是未定義行為
05/19 16:51, 1F

05/19 16:55, , 2F
byte[4] 應該宣告為 uint32_t,不要亂轉型
05/19 16:55, 2F
文章代碼(AID): #1P7feh8P (C_and_CPP)