objective-c 递归访问错误

objective-c BAD ACCESS in recursion

c 函数在执行过程中出现 BAD ACCESS 错误:(为了便于阅读,我省略了函数的实际工作部分,该错误也出现在该代码片段中)

- (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

将 TestObj.m 中的行从

更改为
NSXMLNode *currNode = [[NSXMLNode alloc] init];

NSXMLNode *currNode;

帮我解决了问题。

感谢您的支持:)

基于 gnasher729(感谢您)的评论:

将 TestObj.m 中的行从

更改为
NSXMLNode *currNode = [[NSXMLNode alloc] init];

NSXMLNode *currNode;

帮我解决了问题。

感谢您的支持:)