看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): MAC OS X 10.11.6 Xcode 額外使用到的函數庫(Library Used): LibUSB (很舊的版本) 問題(Question): 有兩隻.m程式,這邊用A檔與B檔代稱. A檔使用一個global structure陣列 --而且不指定大小(結構還有結構&union)-- B檔使用一個global structure指標 --當作USB device handler(結構裡面還有結構&指標)-- 這兩隻檔案做的事情完全沒關係, 但是A檔處理某些特定複雜的物件後(比較簡單的不會), 會把B檔Handler裡面的結構或是指標記憶體蓋掉或者釋放? 導致之後存取Handler發生crash. 只要是會發生的物件,每次必定在固定位置發生crash. (e.g. A檔需要一個迴圈執行100次,才能完成處理物件. 處理相同物件,必在第n次發生) 問題1: 直接在m檔 @implementation和 @interface 外面宣告這種結構,算是純c的寫法嗎? 問題2: 應該如何解釋這種記憶體被汙染現象? 目前我有發現三種暫時解決的方式 a) 把handler改成static or b) 把handler放到class裡面 or c) 把A檔陣列指定固定大小(因為需要的大小是已知的) 補個問題3: 有沒有推薦的正確解法? 因為我是Obj-C新手,有任何錯誤提問或觀念請見諒 另外,前任開發者已經不可考,所以也無從得知為何要這樣寫. 歡迎任何大大給予指教 感激不盡!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.184.42.52 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1475391677.A.AD4.html ※ 編輯: hsm926 (111.184.42.52), 10/02/2016 15:45:40 ※ 編輯: hsm926 (111.184.42.52), 10/02/2016 15:46:56
Sirctal: 這是C跟C++版吧... 10/02 16:28
wtchen: 板規有寫,可討論Obj-C (雖然不是現任板工定的) 10/02 16:32
uranusjr: 這問題感覺和 Objective-C 完全無關, 但我看不懂描述... 10/02 18:45
uranusjr: 為什麼不實際放幾段程式, 而是落落長寫一堆呢 10/02 18:46
wtchen: 板工完全沒碰Obj-C.... @@ 10/02 20:23
wtchen: 這板規我也不知道是啥時引進obj-C的.... 10/02 20:27
firejox: 因為沒obj c版吧@@ 10/02 21:26
fatrabitree: Macdev版可以討論,但我不建議限縮討論空間就是 10/02 21:51
hsm926: 我有先看板規,因為Obj-C聽說可以和C混著寫,所以我問題1 10/02 22:07
hsm926: 是在問是不是C的寫法,也算是有點相關吧.. 10/02 22:07
hsm926: 實際程式很亂&複雜,不好意思放上來,我再想其他辦法好了 10/02 22:09
Killercat: lldb看出問題的.m有沒有currupt啊.... 10/02 22:24
Killercat: 先看debug mode能不能重現 不能重現就很麻煩了 10/02 22:25
hsm926: 特定物件,每次都能重現,且在固定位置. 10/02 22:31
hsm926: A檔就是把它結構陣列裡面變數填值, B就LibUSB沒在做什麼事 10/02 22:32
hsm926: 等A檔填值的動作做很多次, B指標裡面記憶體就被蓋到了.. 10/02 22:34
hsm926: 我研究一下lldb好了,感謝K大與以上大大 10/02 23:19
ho83leo: xcode version 8.0 ? 10/03 23:34
hsm926: Xcode 7.0 10/04 00:35