[問題] Obj-C 記憶體汙染問題

看板C_and_CPP作者 (雜魚護法#1)時間7年前 (2016/10/02 15:01), 7年前編輯推噓4(4015)
留言19則, 8人參與, 最新討論串1/2 (看更多)
開發平台(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

10/02 16:28, , 1F
這是C跟C++版吧...
10/02 16:28, 1F

10/02 16:32, , 2F
板規有寫,可討論Obj-C (雖然不是現任板工定的)
10/02 16:32, 2F

10/02 18:45, , 3F
這問題感覺和 Objective-C 完全無關, 但我看不懂描述...
10/02 18:45, 3F

10/02 18:46, , 4F
為什麼不實際放幾段程式, 而是落落長寫一堆呢
10/02 18:46, 4F

10/02 20:23, , 5F
板工完全沒碰Obj-C.... @@
10/02 20:23, 5F

10/02 20:27, , 6F
這板規我也不知道是啥時引進obj-C的....
10/02 20:27, 6F

10/02 21:26, , 7F
因為沒obj c版吧@@
10/02 21:26, 7F

10/02 21:51, , 8F
Macdev版可以討論,但我不建議限縮討論空間就是
10/02 21:51, 8F

10/02 22:07, , 9F
我有先看板規,因為Obj-C聽說可以和C混著寫,所以我問題1
10/02 22:07, 9F

10/02 22:07, , 10F
是在問是不是C的寫法,也算是有點相關吧..
10/02 22:07, 10F

10/02 22:09, , 11F
實際程式很亂&複雜,不好意思放上來,我再想其他辦法好了
10/02 22:09, 11F

10/02 22:24, , 12F
lldb看出問題的.m有沒有currupt啊....
10/02 22:24, 12F

10/02 22:25, , 13F
先看debug mode能不能重現 不能重現就很麻煩了
10/02 22:25, 13F

10/02 22:31, , 14F
特定物件,每次都能重現,且在固定位置.
10/02 22:31, 14F

10/02 22:32, , 15F
A檔就是把它結構陣列裡面變數填值, B就LibUSB沒在做什麼事
10/02 22:32, 15F

10/02 22:34, , 16F
等A檔填值的動作做很多次, B指標裡面記憶體就被蓋到了..
10/02 22:34, 16F

10/02 23:19, , 17F
我研究一下lldb好了,感謝K大與以上大大
10/02 23:19, 17F

10/03 23:34, , 18F
xcode version 8.0 ?
10/03 23:34, 18F

10/04 00:35, , 19F
Xcode 7.0
10/04 00:35, 19F
文章代碼(AID): #1NyB2zhK (C_and_CPP)
文章代碼(AID): #1NyB2zhK (C_and_CPP)