objective-c递归中的BAD ACCESS

时间:2017-01-17 19:14:08

标签: objective-c cocoa recursion exc-bad-access

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;

为我解决了这个问题。

感谢您的支持:)

1 个答案:

答案 0 :(得分:-1)

基于gnasher729(感谢你)评论:

更改TestObj.m中的行
NSXMLNode *currNode = [[NSXMLNode alloc] init];

NSXMLNode *currNode;

为我解决了这个问题。

感谢您的支持:)