【问题标题】:CFArray created with CFCreateArray crashes when accessed使用 CFCreateArray 创建的 CFArray 在访问时崩溃
【发布时间】:2013-02-08 04:48:01
【问题描述】:
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

调试器显示失败

CoreFoundation`CFGetTypeID:

调试器的输出

__NSCFString

(lldb)

我不确定内存错误在哪里,我认为它必须是由于在CFArrayCreate()中传递了字符串。

【问题讨论】:

    标签: ios xcode macos core-foundation exc-bad-access


    【解决方案1】:

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

    【讨论】:

    • 解决方案是将 CFString 存储到另一个变量中,然后将指针传递给该变量,因为 CFArrayCreate 需要一个指向包含 numValues 对象的存储的指针,并且当您创建一个数组时一个对象,一个普通变量算作包含一个对象的存储。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多