2012-03-07 22 views
0

[OK]を、ので、私は推測してい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文字列の "%@"にはオブジェクトが必要ですが、二重に渡しています。試してください:

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

特に、 "%@"は引数に-messageを呼び出しようとします。引数がdoubleなので、ランタイムは最終的にdoubleをポインタとして扱い、逆参照して(EXC_BAD_ACCESSの結果として)試みます。

メモリ管理に関する限り、compsgがリークしています。プログラムの終わりに、追加します。

[comps release]; 
[g release]; 

これはあなたのエラーの原因となっていない(またそれは本当にあなたが出ているとOSがメモリを再利用されるように、何かを傷つけるされますが、Objective-を学ぶ通りが。しかし、他の場所であなたのオブジェクトを解放しないと、リークが発生します)