Frage

Ich folge durch eine der sehr frühen Beispiele in Objective-C auf dem Mac Lernen. Mein Code ist fast genau der gleiche wie der Code in dem Buch (ein paar Räume und trivial Klammern können abweichen). Es sieht wie folgt aus:

#import <Foundation/Foundation.h>

BOOL areIntsDifferent (int thing1, int thing2) {
    if (thing1 == thing2) {
        return NO;
    }
    else {
        return YES;
    }

}

NSString * boolString (BOOL yesNo) {
    if (yesNo == NO) {
        return (@"NO");
    }
    else {
        return (@"YES");
    }
}


int main (int argc, const char * argv[]) {
    BOOL areTheyDifferent;

    areTheyDifferent = areIntsDifferent(5, 5);
    NSLog(@"are %d and %d different? %@", 5, 5, boolString(areTheyDifferent));

    areTheyDifferent = areIntsDifferent(23, 42);
    NSLog(@"are %d and $d different? %@", 23, 42, boolString(areTheyDifferent));

    return 0;
}

Wenn ich den Code ausführen, ist das, was ich in der Konsole:

[Session started at 2009-12-19 01:41:37 -0500.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1346) (Fri Sep 18 20:40:51 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys001
Loading program into debugger…
Program loaded.
run
[Switching to process 3125]
Running…
2009-12-19 01:41:38.432 BOOL Party[3125:a0f] are 5 and 5 different? NO
Program received signal:  “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all

Ich bin nicht sicher, warum dies geschieht. Ich weiß, dass es etwas mit der boolString Funktion zu tun, denn als ich den Anruf kommentieren Sie sich aus, das Programm fein läuft. Mein Bauchgefühl sagt mir, dass dies etwas mit einigen neuen Speichern-Management-Sachen in Snow Leopard (dieses Buch früher Snow Leopard von etwa sechs Monaten) zu tun. Wer weiß, was das Problem sein könnte?

War es hilfreich?

Lösung

Sie haben einen Tippfehler in Zeile 30. Sie% d wollen, nicht $ d. Da Sie die zweite Dezimalstelle Platzhalter fehlen, beenden Sie 42 in dem Verzeichnis% vorbei bis @ und NSLog versucht zu dereferenzieren Speicherplatz 42, als ob es der Zeiger auf eine Zeichenfolge ist, und Sie zum Absturz bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top