2011-03-22 57 views
0

我有arg1這是一個IMessage。消息對象定義爲:什麼是__CFString?

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

和CFString字符串被定義爲:

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

和__CFString被定義爲:

struct __CFString; 

我的目標是獲得某種形式的字符串是它來自arg1的NSString或CFStringRef,那我該怎麼做呢? 謝謝。

這裏是我的錯誤,當我嘗試NSLog的mCFRef:

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'類型的存在是爲了強調指針是不透明的,而不是指向一個對你開放的結構的指針。 – 2011-03-23 11:28:23

+0

我這樣做,仍然得到EXC BAD ACCESS錯誤,請檢查原始問題的錯誤。謝謝! – user635064 2011-03-23 17:00:52

+0

也許底層的CFStringRef是void指針?我嘗試解除引用無效點並將其轉換爲CFStringRef,但仍然沒有運氣... – user635064 2011-03-23 17:17:34

回答

1

我不知道你是從得到這個,但CFStringRef被定義爲struct __CFString *const,所以你已經擁有的東西,看起來相當。

+0

感謝您的回答。所以如果我想從arg1中獲取CFSstringRef,我會這樣做:CFStringRef s =(arg1 - > _ field2).mCFRef;這會導致程序崩潰。 – user635064 2011-03-22 20:28:57

+2

@ user635064:是的,儘管這與CF無關;這是您的程序和/或您正在使用的任何其他庫的問題。 'arg1'不是一個指向任何東西的指針,或者它是一個指向沒有足夠存儲空間的指針,或者'mCFRef'沒有被一個指向CFString對象的指針填充,或者'mCFRef'設置了一個指向一個指針的指針CFString對象,但該對象已被擁有它的所有東西釋放(可能還有一個 - 過度釋放)。如果它是最後一個,樂器的殭屍模板將有所幫助。 – 2011-03-23 11:20:32

+0

嘿,這是輸入。當我嘗試登錄時,這就是我在控制檯中得到的,也許你可以猜測發生了什麼?我把它放在我原來的問題格式(更容易閱讀)。謝謝 – user635064 2011-03-23 16:51:35

相關問題