2011-10-23 2 views
-1

그래서 나는 지금까지 해결할 수 없었던 산발적 인 문제가있는 것처럼 보입니다. 겉으로보기에 무작위 점에 기능은 다만 끊을 것이다, 어떤 난조 다음에 논쟁은 타락하기 시작된다. Objective-C의 함수 호출을 통해 인수 값이 손상되었습니다.

Object * testObject = [[Object alloc] init]; 
NSLog(@"ID: %d", testObject); 
[testFunction:testObject]; 

... 

- (void) testFunction:(id)testObject 
{ 
    NSLog(@"ID: %d", testObject); 

이 내가 전달 된 참조를 사용하는 갈 때 나에게 EXC_BAD_ACCESS 경고 또는 기타 다양한 문제를 제공, 일치하지 않을 것이다이 경우 로그 문을 어떻게 예를

를 들어

. 그래서처럼 호출 후

- (void) testFunction:(id)testObject:(int)dummy 
{ 

과 :

[testFunction:testObject:1111]; 

내 기능 경기를 선언의

은 가끔과 같이 기능에 '더미 값'에 시침하여 문제를 해결할 수 있습니다 .h/.m 파일에서 추측 할 수있는 유일한 점은 프로젝트의 다른 곳에서 .h 파일의 해당 함수 선언이 누락되었을 가능성이 있습니다. 그러나 문제의 기능은 항상 올바르게 수행됩니다. (더블, 트리플 체크 등). 나는 그것이 유지/릴리스 이슈가 아니라는 것을 알고 있습니다. Objective-C에 비교적 익숙하지 않은 데요. 나는 그 누수가 있었고, 누수를 찾고 계기를 통해 도망 쳤고 아무 것도없는 것으로 보입니다. 이 문제의 원인에 대한 생각은 무엇입니까? 프로젝트에서 전혀 관련없는 코드를 겉으로보기에는 변경 한 후에 문제가 나타나는 이유는 무엇입니까?

+1

는 NSLog 문에서 '%의 @'대신'%의 d'를 사용해보십시오. – EmptyStack

+2

여러 가지 방법으로 문제가 발생하고 있습니까? 테스트 프로젝트로 이것을 재현하려 했습니까? 또한 질문에 실제 코드를 넣는 것이 가장 좋습니다. 게시 한 스 니펫은 유효하지 않으며 문제를 진단하는 사람을 돕지 않습니다. –

+1

목적과 목적에있어 서로 다른 방법과 기능을 사용하지 마십시오. 매우 다른 것들입니다. – jrturton

답변

1

문제는 아마도 개체를 잘못된 방식으로 기록하고있는 것일 수 있습니다. Object을 기록하면 이전처럼 형식을 지정할 수 없습니다.

코드를 기록 할 때 잘못된 형식의 액세스 오류가 발생할 수 있습니다.

올바른 형식에 대한 사과 설명서를 정말로 읽어야합니다.

그리고 당신은 여기에서이 작업을 수행 할 수 있습니다

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

+1

'% d '은 (는) 정수가 아닌 double 값입니다. 또한 '% d'를 사용하여 '객체'(기술적으로 포인터)를 기록 할 수 있습니다.이 경우 해당 메모리 주소는 10 진 정수로 형식이 지정됩니다. 포인터를 유효한 정수로 가리키는 지 여부에 관계없이 포인터를 십진수로 로깅하는 것은 항상 유효합니다. –

+0

@Bavarious : 당신 말이 맞아요. 나는 교정했다. 사과의 모든 것 doc tho : D –