2010-12-14 30 views
2

我正在使用開源的json解析器,但是在編譯它時給了我解引用警告。可能的空取消引用

MyProject/Classes/SBJSON.m:403:13可能的空解除引用。根據「創建並返回NSError對象」編碼標準參數「錯誤」可能是空

- (BOOL)scanValue:(NSObject **)o error:(NSError **)error 
{ 
skipWhitespace(c); 

switch (*c++) { 
    case '{': 
     return [self scanRestOfDictionary:(NSMutableDictionary **)o error:error]; 
     break; 
    case '[': 
     return [self scanRestOfArray:(NSMutableArray **)o error:error]; 
     break; 
    case '"': 
     return [self scanRestOfString:(NSMutableString **)o error:error]; 
     break; 
    case 'f': 
     return [self scanRestOfFalse:(NSNumber **)o error:error]; 
     break; 
    case 't': 
     return [self scanRestOfTrue:(NSNumber **)o error:error]; 
     break; 
    case 'n': 
     return [self scanRestOfNull:(NSNull **)o error:error]; 
     break; 
    case '-': 
    case '0'...'9': 
     c--; // cannot verify number correctly without the first character 
     return [self scanNumber:(NSNumber **)o error:error]; 
     break; 
    case '+': 
     *error = err(EPARSENUM, @"Leading + disallowed in number"); 
     return NO; 
     break; 
    case 0x0: 
     *error = err(EEOF, @"Unexpected end of string"); 
     return NO; 
     break; 
    default: 
     *error = err(EPARSE, @"Unrecognised leading character"); 
     return NO; 
     break; 
} 

NSAssert(0, @"Should never get here"); 
return NO; 
} 

這顯示了在錯誤提領。

+1

隨着代碼會更容易... – Eiko 2010-12-14 21:33:50

+0

我只是編輯我的問題。 – Ksinak 2010-12-14 21:48:57

回答

5

它抱怨錯誤參數可能爲NULL(如果調用者選擇傳遞NULL)。然後,聲明

*error = err(EPARSENUM, @"Leading + disallowed in number"); 

將崩潰。 A R eported work-around是把一個如果賦值語句左右:

if(error){ 
    *error = err(EPARSENUM, @"Leading + disallowed in number"); 
} 
+0

感謝Martin,這在我的應用程序中解決了很多潛在的空引用問題。 – Ksinak 2010-12-15 05:55:12