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;
решить эту проблему для меня.
Спасибо за вашу поддержку :)
Это явно бесконечная рекурсия, поэтому рано или поздно ваше приложение будет врезаться когда из памяти. – Sulthan
Как указывает @Sulthan - этот код представляет собой бесконечную рекурсию; ничто в коде не останавливает выполнение, и, таким образом, когда в приложении заканчивается память, он выйдет из строя. – Tander
Вывод/init полностью бессмысленен. – gnasher729