Управление памятью: ошибка EXC_BAD_ACCESS - PullRequest
0 голосов
/ 07 марта 2012

Хорошо, поэтому я продолжаю получать ошибку EXC_BAD_ACCESS, которая, как я полагаю, очень похожа на ошибку ошибки сегмента в C.

Моя книга не совсем конкретна по некоторым из этих деталей, поэтому мне нужна помощь,

#import <Foundation/Foundation.h>

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

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSDateComponents *comps = [[NSDateComponents alloc ]init];
    [comps setYear:1984];
    [comps setMonth:7];
    [comps setDay:18];
    [comps setHour:0];
    [comps setMinute:0];
    [comps setSecond:0];

    NSCalendar *g =[[NSCalendar alloc ]init];
    NSDate *dateofbirth = [g dateFromComponents:comps];
    NSDate *now = [NSDate date];

    double timeSince = [now timeIntervalSinceDate:dateofbirth ];


    NSLog(@"your age %@", timeSince);



    [pool drain];



    return 0;
}

Я думаю, что у меня проблемы, потому что я инициализирую и выделяю память в пуле.Это правильно?

1 Ответ

2 голосов
/ 07 марта 2012

"% @" в вашей строке NSLog ожидает объект, но вы прошли в двойном.Попробуйте:

    NSLog(@"your age %lf", timeSince);

В частности, "% @" пытается вызвать -message для аргумента.Поскольку ваш аргумент является двойным, среда выполнения в конечном итоге пытается трактовать двойной как указатель и разыменовывает его (в результате получается ваш EXC_BAD_ACCESS).

Что касается управления памятью, то у вас утечка compsи g.В конце программы добавьте:

[comps release];
[g release];

Хотя это не приводит к вашей ошибке (и не наносит никакого вреда, когда вы выходите из системы, а ОС восстанавливает память.Objective-C, однако, не освобождая ваши объекты в других местах, приведет к утечкам)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...