2011-03-22 4 views
0

나는 IMessage 인 arg1을 가지고있다.__CFString이란 무엇입니까?

struct IMessage { 
    ... 
    struct CFString _field2; 
    ... 
}; 

및 CFString는 다음과 같이 정의된다 : iMessage를 다음과 같이 정의된다

struct CFString { 
    void **_vptr$CFObject; 
    struct __CFString *mCFRef; 
    _Bool mIsMutable; 
}; 

및 __CFString는 다음과 같이 정의된다 :

struct __CFString; 

내 목표는 그것을 할 어떤 종류의 문자열을 얻을 수 있습니다 NSString 또는 CFStringRef arg1에서, 그래서 어떻게 할 수 있습니까? 감사합니다. . 내가 mCFRef nslog하려고 할 때 다음

은 내가 오류입니다 : 당신은 이미 무언가를 가지고 있으므로,

Thread 0 crashed: 

# 1 0x97b41edb in _objc_msgSend + 0x0000001B (libobjc.A.dylib + 0x00005edb) 
# 2 0x9610b5f2 in __CFStringAppendFormatAndArgumentsAux + 0x00000C42 (CoreFoundation + 0x0002c5f2) 
# 3 0x9610a979 in __CFStringCreateWithFormatAndArgumentsAux + 0x00000069 (CoreFoundation + 0x0002b979) 
# 4 0x961b3a3e in __CFLogvEx + 0x0000008E (CoreFoundation + 0x000d4a3e) 
# 5 0x9415387c in _NSLogv + 0x0000008F (Foundation + 0x0009487c) 
# 6 0x941537eb in _NSLog + 0x0000001B (Foundation + 0x000947eb) 
+1

해당 구조에서 'mCFRef'선언을 변경해야합니다. 그것은'CFStringRef mCFRef;'이어야합니다. 다른 모든'BlahBlahRef' 타입과 마찬가지로'CFStringRef' 타입은 포인터가 당신에게 열려있는 구조체에 대한 포인터가 아니라 불투명하다는 것을 강조하기 위해 존재합니다. –

+0

나는 그랬지만 여전히 EXC BAD ACCESS 오류가 발생했습니다. 오류에 대한 원래 질문을 확인하십시오. 감사! – user635064

+0

아마도 기본 CFStringRef가 void 포인터일까요? 나는 무효화 점을 역 참조하여 CFStringRef로 캐스팅했지만 여전히 운이 없다. – user635064

답변

1

당신이에서이를 얻고있는 곳 모르겠지만, CFStringRef가 struct __CFString *const로 정의를 그 동등한 것으로 보입니다.

+0

답변 해 주셔서 감사합니다. 그래서 arg1에서 CFSstringRef를 얻으 려한다면 다음과 같이하면됩니다 : CFStringRef s = (arg1 -> _ field2) .mCFRef; 이로 인해 프로그램이 중단됩니다. – user635064

+2

@ user635064 : 예, CF와는 아무런 관련이 없습니다. 그것은 당신의 프로그램이나 당신이 사용하고있는 다른 라이브러리의 문제입니다. 'arg1'은 아무것도 가리키는 포인터가 아니거나 저장 공간이 충분하지 않은 포인터이거나'mCFRef'가 CFString 객체에 대한 포인터로 채워지지 않았거나 뭔가가 mCFRef를 가리키는 포인터로 설정했습니다 CFString 객체이지만 그 객체는 그 객체를 소유하고있는 모든 것에 의해 릴리즈되었습니다 (그리고 아마도 하나 이상의 릴리즈 이상). 그것이 마지막 인 경우, Instruments의 좀비 템플릿이 도움이 될 것입니다. –

+0

안녕하세요. 입력 내용입니다. 이것은 콘솔에서 nslog를 시도 할 때 얻는 것입니다. 어쩌면 무슨 일이 일어 났는지 짐작할 수 있을까요? 나는 원래의 질문에 형식화 (읽기가 훨씬 쉬워 짐)를했다. 감사 – user635064