2013-02-08 55 views
0
unsigned char _MyString[] = {0xda, 0xe5, 0x18, ..., 0x00}; 

CFArrayRef array = CFArrayCreate(NULL, 
           (const void**) CFStringCreateWithBytes(NULL, 
                     _MyString, 
                     sizeof(_MyString), 
                     kCFStringEncodingASCII, 
                     FALSE), 
           1, 
           &kCFTypeArrayCallBacks); 

CFShow(arr); // <-- EXEC_BAD_ACCESS ERROR 

調試器顯示其未能在CFArray與CFCreateArray創建訪問時崩潰

CoreFoundation`CFGetTypeID:

從調試器輸出

__NSCFString

( lldb)

我不知道內存錯誤的位置,我認爲這一定是由於在CFArrayCreate()中傳遞字符串。

回答

1

CFStringCreateWithBytes的返回值投射到一個const無效**不正確,這就是爲什麼它的崩潰。它不是指向指針的指針,而是指向CFString的指針。

+0

並將該溶液是將CFString字符串存儲到另一個變量,則指針傳遞給該變量,由於CFArrayCreate希望含有'numValues'對象的指針存儲,並且當要創建一個對象的陣列,一普通變量計爲包含一個對象的存儲。 –