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内の行を変更するには、私のために問題を解決しました。
ご支援をありがとう:)
従って、これは、遅かれ早かれ、それはメモリの外にあるときにアプリがクラッシュします、明らかに無限再帰です。 – Sulthan
@Sulthanが指摘しているように、このコードは無限回帰です。コード内の何も実行を停止せず、アプリがメモリ不足になるとクラッシュします。 – Tander
alloc/initは完全に無意味です。 – gnasher729