作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] 轉型有可能出錯嗎?
時間Wed Jun 30 15:17:16 2010
http://nopaste.csie.org/a7b75
請教一下
這種C-Style轉型
我已經非常確定我塞下來是甚麼型態
只是用別的tyep收
要用的時候 在cast回來
這樣做 如果我非常確定 傳來是啥 我要用時我就轉回他原本的type
會不會有什麼問題?
還是說有甚麼風險是這種轉型有可能會遇到的?
因為現在遇到一個問題 發現轉型後 印出值也對但是function還沒return
程式就莫名出錯 exception
改成不轉型 傳來就是WCHAR* 收
就沒事
測試程式也都沒啥問題
只不過現在擺同樣邏輯到大程式 就出錯...
想不出可能會發生問題的點....
覺得很莫名其妙
謝謝
ps.
如果是cast "值" 有可能會 double => int 失去4byte 當然轉回去會錯
但我現在是指標 會有可能出現甚麼問題嗎???
thx
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
※ 編輯: QQ29 來自: 219.87.64.222 (06/30 15:21)
→ tinlans:對 pointer 做 casting 要小心 strict aliasing 規則。 06/30 15:56
→ tinlans:你這個小程式倒是沒這問題,但「同樣邏輯」的實際 code 06/30 15:57
→ tinlans:是什麼,我就不得而知了。 06/30 15:57
→ QQ29:strict aliasing是什麼 我不知道我會去查查~ 06/30 16:16
→ QQ29:不過win32 API不是常常都需要轉型成void*再塞給他嗎 06/30 16:16
→ QQ29:還是說這void* 例外~還是說 win32 API內有做特別的事 06/30 16:17
→ QQ29:而不是單純的轉回來?? 06/30 16:17
→ QQ29:....網路上看不懂什麼是strict aliasing....但 07/01 01:19
→ QQ29:aliasing這個詞好像常聽到....但都不知道啥意思 07/01 01:19
→ akasan:把key word丟去google tinlans大大的blog就寫很清楚了說 07/01 09:18