【发布时间】:2013-03-07 06:50:25
【问题描述】:
我不熟悉使用核心基础。我想使用字典来存储一些键值对。该值必须是指向结构的指针。该指针指向动态分配的缓冲区。
CFMutableDictionaryRef init_hash_table() {
return CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
}
这用于创建字典并将返回值存储为全局变量。
CFNumberRef
create_hash_key(int sd) {
return CFNumberCreate(NULL, kCFNumberIntType, &sd);
}
int
add_hash_entry(CFMutableDictionaryRef dict, int sd, void *pkt) {
CFNumberRef key = create_hash_key(sd);
CFDictionarySetValue(dict, key, pkt);
return 0;
}
当我执行这段代码时,我得到了段错误。我看到 pkt 有一个有效的地址,并且似乎创建了密钥。有谁知道如何分配一个指向值部分的指针?
程序接收到信号EXC_BAD_ACCESS,无法访问内存。 原因:KERN_INVALID_ADDRESS 地址:0x0000000000000011 objc_msgSend_fixup()中的0x00007fff8c9f339f
有什么想法吗?
【问题讨论】:
-
您是否有特定的理由不使用 Cocoa 而不是 Core Foundation?它可以避免一些头痛。
-
没什么,我刚开始使用 CF,我对它的使用非常有限。这是唯一的用例。
-
有时需要 CF。引用 Apple 的话:重要提示: 使用 CFDictionaryRef 数据类型而不是 NSDictionary 对象来跟踪触摸,因为 NSDictionary 复制它的键。 UITouch 类没有采用对象复制所需的 NSCopying 协议。
标签: c++ c core-foundation