2017-01-17 12 views
0

c функция, которая вызывает у меня ошибку BAD ACCESS во время выполнения: (я оставил фактически действующую часть функции для удобства чтения, ошибка также появляется в этом фрагменте кода)object-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; 

решить эту проблему для меня.

Спасибо за вашу поддержку :)

+6

Это явно бесконечная рекурсия, поэтому рано или поздно ваше приложение будет врезаться когда из памяти. – Sulthan

+1

Как указывает @Sulthan - этот код представляет собой бесконечную рекурсию; ничто в коде не останавливает выполнение, и, таким образом, когда в приложении заканчивается память, он выйдет из строя. – Tander

+1

Вывод/init полностью бессмысленен. – gnasher729

ответ

-1

основывая на gnasher729 (в благодарность вам) комментарий:

перепрофилирования в TestObj.m от

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

к

NSXMLNode *currNode; 

решил проблему для меня.

Спасибо за вашу поддержку :)

 Смежные вопросы

  • Нет связанных вопросов^_^