2011-05-03 84 views
0

我在漫長的一天結束時寫了這個代碼:追趕EXC_BAD_ACCESS

MyObject *thisObj; 
// ... lots of code here ... 
thisObj.name = @"test"; // Which caused an EXC_BAD_ACCESS as I hadn't alloc/init'd thisObj. 

我花了好長時間才弄清楚我忘了初始化,所以我想知道的對象 - 有醒目的任何方式這個。我試圖設置NSZombie,但似乎沒有做任何事情。

有關最佳方式的任何想法?

+0

EXC_BAD_ACCESS實際上是某種錯誤的集合。所以這取決於你是否可以很容易地捕捉它(根本)的特定情況。例如,NSZombieEnabled不適用於任何情況。 – elslooo 2011-05-03 18:08:36

+3

NSZombie告訴你是否發送消息給保留計數爲0的對象。它不能幫助你處理未初始化的變量。 – 2011-05-03 18:09:51

回答

5

永遠不要聲明一個變量,而無需將它初始化爲某個值。即使

MyObject *thisObj = nil; 

是優於

MyObject *thisObj; 

有可能是一個編譯器標誌,你可以打開要提醒你這一點。

編輯:

是的,你可以使用-wuninitialized -O(大寫的O,不是0)得到這個:

enter image description here

+0

戴夫 - 謝謝。如果我在另一漫長的一天結束時犯了類似的錯誤,我肯定編譯器標誌會非常方便! – Snowcrash 2011-05-03 21:13:25