2012-03-07 2 views
0
, 그래서 내가 추측 오전 EXC_BAD_ACCESS 오류가 계속 확인

메모리 관리 : EXC_BAD_ACCESS 오류

내 책은 이러한 세부 사항 중 일부에 실제 특정하지 C.에서 독방 감금 오류 오류처럼 많이, 그래서

I 도움이 필요해.

#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- 내용으로. 그러나 다른 장소에서 물건을 내 보내지 않으면 누수가 발생할 수 있습니다.)