[閒聊] 大家工作上看過哪些誇張的 CODE ?

看板Soft_Job作者 (㊣小臃腫㊣)時間14年前 (2010/05/15 07:04), 編輯推噓4(4010)
留言14則, 4人參與, 最新討論串1/31 (看更多)
最近看到同事寫一個 char* GetXXXName(...) { char str[256] = {'\0'}; ..... return str; } 回傳區域變數指標...囧rz 神奇的是跑起來都沒錯, 大概也不會改了吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.56.192

05/15 07:48, , 1F
應該是那塊記憶體還沒被其他程式用到 "值"暫時沒變
05/15 07:48, 1F

05/16 07:44, , 2F
如果是static linker,又有做range,size check會有錯嗎?
05/16 07:44, 2F

05/16 08:58, , 3F
2F: 請看 C_and_CPP 版置底的「新手十二誡」第6條
05/16 08:58, 3F

05/16 14:04, , 4F
出錯是compiler對function內local array使用stack臨時配
05/16 14:04, 4F

05/16 14:07, , 5F
置又再重用同一stack,才會有pointer跟著消失/覆蓋問題,
05/16 14:07, 5F

05/16 14:10, , 6F
如果靜態配置(另配stack或linker給一段data space)就不出
05/16 14:10, 6F

05/16 14:13, , 7F
錯,這是該語言使用stack配置local variable才造成的.如果
05/16 14:13, 7F

05/16 14:22, , 8F
現該問題, 是對該待進一步使用的local variable欠宣告.
05/16 14:22, 8F

05/16 16:11, , 9F
出 應該 缺指定
05/16 16:11, 9F

05/16 20:41, , 10F
回樓上,以C來說,local var就是用stack,所以C不能這樣做
05/16 20:41, 10F

05/16 20:42, , 11F
方法1:用 malloc 可行但後續使用容易忘記free
05/16 20:42, 11F

05/16 20:44, , 12F
方法2:用static var,缺點:thread unsafe且str一直佔ram
05/16 20:44, 12F

05/16 20:45, , 13F
方法3:由caller準備好一塊空間傳入,func內不做記憶體管理
05/16 20:45, 13F

05/18 19:30, , 14F
還是要改,否則到時後真的會找不到錯誤喔==
05/18 19:30, 14F
文章代碼(AID): #1BxTS0pm (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 31 篇):
文章代碼(AID): #1BxTS0pm (Soft_Job)