【问题标题】:Memory Management :EXC_BAD_ACCESS error内存管理:EXC_BAD_ACCESS 错误
【发布时间】:2012-03-07 09:06:30
【问题描述】:

好的,所以我不断收到 EXC_BAD_ACCESS 错误,我猜这很像 C 中的 seg fault 错误。

我的书并没有具体说明其中的一些细节,所以我需要一些帮助。

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

我认为我遇到了麻烦,因为我正在池中初始化和分配内存。这是正确的吗?

【问题讨论】:

    标签: objective-c memory memory-management


    【解决方案1】:

    你的 NSLog 字符串中的 "%@" 需要一个对象,但你传入了一个双精度对象。试试:

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

    具体来说,“%@”尝试在参数上调用 -message。由于您的参数是双精度,因此运行时最终会尝试将双精度视为指针,并取消引用它(导致您的 EXC_BAD_ACCESS)。

    就内存管理而言,您正在泄漏compsg。在程序末尾添加:

    [comps release];
    [g release];
    

    虽然这不会导致您的错误(也不会真正损害任何东西,因为您正在退出并且操作系统正在回收内存。但是,当您学习 Objective-C 时,不在其他地方释放您的对象将导致泄漏)

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2010-11-25
      • 1970-01-01
      • 2011-12-20
      • 2016-04-22
      • 1970-01-01
      相关资源
      最近更新 更多