Ios 使用CFCreateArray创建的CFArray在被访问时崩溃 无符号字符_MyString[]={0xda,0xe5,0x18,…,0x00}; CFArrayRef数组=CFArrayCreate(NULL, (const void**)CFStringCreateWithBytes(NULL, _MyString, sizeof(_MyString), kCFStringEncodingASCII, 假),, 1. &KCFTyperaryCallbacks); CFShow(arr);//

Ios 使用CFCreateArray创建的CFArray在被访问时崩溃 无符号字符_MyString[]={0xda,0xe5,0x18,…,0x00}; CFArrayRef数组=CFArrayCreate(NULL, (const void**)CFStringCreateWithBytes(NULL, _MyString, sizeof(_MyString), kCFStringEncodingASCII, 假),, 1. &KCFTyperaryCallbacks); CFShow(arr);//,ios,xcode,macos,core-foundation,exc-bad-access,Ios,Xcode,Macos,Core Foundation,Exc Bad Access,将CFStringCreateWithBytes的返回值强制转换为常量void**是不正确的,这就是它崩溃的原因。它不是指向指针的指针,而是指向CFString的指针。解决方案是将CFString存储到另一个变量中,然后将指针传递到该变量,因为CFArrayCreate需要指向包含numValues对象的存储的指针,当您创建一个对象数组时,普通变量计为包含一个对象的存储器。 unsigned char _MyString[] = {0xda, 0xe5, 0x18, ..., 0x00}; C

将CFStringCreateWithBytes的返回值强制转换为常量void**是不正确的,这就是它崩溃的原因。它不是指向指针的指针,而是指向CFString的指针。

解决方案是将CFString存储到另一个变量中,然后将指针传递到该变量,因为CFArrayCreate需要指向包含
numValues
对象的存储的指针,当您创建一个对象数组时,普通变量计为包含一个对象的存储器。
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