سؤال

وأنا بعد من خلال أحد الأمثلة المبكرة للغاية في <لأ href = "https://rads.stackoverflow.com/amzn/click/com/1430218150" يختلط = "noreferrer نوفولو" عنوان = "التعلم Objective- C على ماك "> تعلم الهدف-C على ماك . قانون بلدي هو بالضبط تقريبا نفس التعليمات البرمجية في كتاب (فضاءات الزوجين وأقواس تافهة قد تختلف). يبدو مثل هذا:

#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;
}

عند I تشغيل التعليمات البرمجية، وهذا هو ما يحصل في وحدة التحكم:

[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

وأنا لا أدري لماذا يحدث هذا. أنا أعرف أن لديها ما تفعله مع وظيفة boolString، لأنه عندما أعلق مهلة استدعاء ذلك، فإن البرنامج يعمل على ما يرام. حدسي يقول لي ان هذه لديها ما تفعله مع بعض الاشياء الجديدة إدارة الذاكرة في سنو ليوبارد (هذا الكتاب يسبق سنو ليوبارد بنحو ستة أشهر). أحد يعرف ما يمكن أن تكون المشكلة؟

هل كانت مفيدة؟

المحلول

وأن يكون لديك خطأ مطبعي في خط 30. أنت تريد٪ د، وليس $ د. لأنك في عداد المفقودين ثاني نائب عشري، ينتهي بك الأمر يمر 42 إلى٪ @، وNSLog يحاول ذاكرة dereference موقع 42 كما لو انها مؤشر إلى سلسلة، وأنت تحطم الطائرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top