Ich habe die folgende Methode:Unexpected EXC_BAD_ACCESS in Objective-C
-(void)testAPIModule {
self.requests = [NSMutableArray array];
NSLog(@"making arrays");
/*(A)*/ id array1 = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithFloat:2], nil];
/*(B)*/ id array2 = [NSArray arrayWithObjects:[NSNumber numberWithInt:4], [NSNumber numberWithInt:5]];
NSLog(@"made array=%@",array2);
for(ServerRequest *req in self.requests) {
[Networker sendRequest:req withDelegate:self];
[req release];
}
}
Der Code wie erwartet läuft.
Allerdings, wenn ich Zeile (A) auskommentieren ODER die ", Null" am Ende davon entfernen, bekomme ich einen EXC_BAD_ACCESS
Fehler in Zeile (B)! Dem Debugger zufolge tritt der Fehler in CFRetain in dem integrierten Konstruktor + [NSArray arrayWithObjects] auf.
Zusätzlich, wenn ich Zeile (A) kommentieren und die for (...) Schleife auskommentieren, durchläuft der Code die Methode.
Das ist sehr unerwartet für mich. Was mache ich falsch online (B)? Und warum würde das Erstellen eines komplett anderen Arrays in Zeile (A) die Methode durchlaufen lassen? Und warum verhindert das Auskommentieren der For (...) -Schleife den Fehler in der Zeile (B) davor?
Kann jemand erklären, warum das ist? Oder gib mir wenigstens einen Tipp zum Debuggen? Ich habe bereits verifiziert, dass die Methode nur einmal ausgeführt wird und dass "Selbst" gültig ist.
Nun, das ist neu für mich. Vielen Dank. Obwohl ich immer noch keine Ahnung habe, warum Linie B funktioniert hat, als Linie A ihr vorausging. Ich denke, es ist nur mit Müll gefüllt, der zufällig mit einem NSArray * -Zeiger ausgerichtet wurde? – tba
Wahrscheinlich, weil der Fehler aufgetreten ist, wenn Sie über Zeile A hinausgehen. Nicht sicher, warum Zeile B überhaupt funktioniert hätte - es sollte definitiv auch ein Problem verursachen. –
Alles hängt davon ab, was auf dem Stapel zu der Zeit ist. Es ist sehr wahrscheinlich, dass die Null von Linie A noch immer auf dem Stapel für Linie B war, also hatten Sie Glück. – kperryua