2012-03-07 119 views
0

好了,我不斷收到這我猜一個EXC_BAD_ACCESS錯誤是很多像C的賽格故障錯誤內存管理:EXC_BAD_ACCESS錯誤

我的書是不是其中的一些細節真實具體,所以我需要一些幫助。

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

我想我遇到了麻煩,因爲我在池中初始化和分配內存。它是否正確?

回答

2

你的NSLog字符串中的「%@」需要一個對象,但你已經傳入了一個double對象。請嘗試:

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

具體而言,「%@」嘗試在參數上調用-message。由於你的參數是double,所以運行時最終試圖將double作爲一個指針,並將其解引用(導致你的EXC_BAD_ACCESS)。

就內存管理而言,您正在泄漏compsg。在節目的最後,增加:

[comps release]; 
[g release]; 

雖然這不會導致你的錯誤(也確實傷害任何東西,因爲你是在退出和OS被回收內存當你學習Objective-。 C,但是,不在其他地方釋放你的物體會導致泄漏)