2017-01-17 15 views
0

実行中にBAD ACCESSエラーが発生する関数:(読みやすくするために実際に関数の一部を使いませんでした。このコードスニペットにもエラーが表示されます)objective-c BAD ACCESS in recursion

- (void) recursiveClearUpToH2:(NSXMLElement *)rootElement 
{ 
    NSXMLNode *currNode = [[NSXMLNode alloc] init]; 
    currNode = [rootElement childAtIndex:0]; 
    [self recursiveClearUpToH2:currNode]; 
} 

エラーが最初の行 "NSXML ..."に表示されます。面白いことは、いつも別の再帰で現れることです。 main.m:

#import <Cocoa/Cocoa.h> 
#import "TestObj.h" 

int main(int argc, const char * argv[]) { 
    TestObj *testObj = [[TestObj alloc] init]; 
    NSInteger *i =1; 
    [testObj recTest:i]; 
    return 0; 
} 

TestObj.h:


他の人に私の質問の利益を向上させることを望んで、私は簡単な方法で同じエラーを再現し、別のアプリを書きました

#import <Foundation/Foundation.h> 

@interface TestObj : NSObject 
- (void)recTest:(NSInteger *)recCount; 
@end 

TestObj.m:

#import "TestObj.h" 

@implementation TestObj 
- (void)recTest:(NSInteger *)recCount 
{ 
    recCount += 1; 
    NSXMLNode *currNode = [[NSXMLNode alloc] init]; 
    if (recCount < 100) { 
     TestObj *testObj = [[TestObj alloc] init]; 
     [testObj recTest:recCount]; 
    } 
} 
@end 

NSXMLNode *currNode; 

NSXMLNode *currNode = [[NSXMLNode alloc] init]; 

からTestObj.m内の行を変更するには、私のために問題を解決しました。

ご支援をありがとう:)

+6

従って、これは、遅かれ早かれ、それはメモリの外にあるときにアプリがクラッシュします、明らかに無限再帰です。 – Sulthan

+1

@Sulthanが指摘しているように、このコードは無限回帰です。コード内の何も実行を停止せず、アプリがメモリ不足になるとクラッシュします。 – Tander

+1

alloc/initは完全に無意味です。 – gnasher729

答えて

-1

gnasher729さん(あなたのおかげで)に基づかコメント:

NSXMLNode *currNode = [[NSXMLNode alloc] init]; 

からTestObj.m内の行を変更

NSXMLNode *currNode; 

は私の問題を解決しました。ご支援のための

感謝:)