Macos 具有CFNumberTargetValue的分段错误
我完全搞不懂这段代码是如何导致分段错误的。该代码在10.5+上运行良好,但在10.4上seg故障。有什么想法吗?故障发生在CFNumberTargetValue期间Macos 具有CFNumberTargetValue的分段错误,macos,core-foundation,Macos,Core Foundation,我完全搞不懂这段代码是如何导致分段错误的。该代码在10.5+上运行良好,但在10.4上seg故障。有什么想法吗?故障发生在CFNumberTargetValue期间 CFNumberRef volume_num = (CFNumberRef)CFDictionaryGetValue(dict, CFSTR("Volume")); if(volume_num != NULL) { float volume = 1.f; CFNumberGetValue(volume_num, kC
CFNumberRef volume_num = (CFNumberRef)CFDictionaryGetValue(dict, CFSTR("Volume"));
if(volume_num != NULL) {
float volume = 1.f;
CFNumberGetValue(volume_num, kCFNumberFloatType, &volume);
};
编辑:上面的代码获取由下面的代码添加到字典中的值。mKitManager.GetKitVolume()返回默认值1.0
AddFloatToDictionary(dict, CFSTR("Volume"), mKitManager.GetKitVolume());
static void AddFloatToDictionary(CFMutableDictionaryRef dict, CFStringRef key, float value)
{
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberFloatType, &value);
CFDictionarySetValue(dict, key, num);
CFRelease(num);
}
- cfNumberTargetValue(卷数、kCFNumberFloatType和卷)
我对OSX不太熟悉,但我假设您将使用gdb/dbx或同等产品。我将分段错误追溯到这一行:
mCurrentArray = CFArrayCreateMutableCopy(kCFAllocatorDefault, array_capacity, newArray);
问题是要复制的阵列的阵列容量不正确(太小)。为什么这会在程序的后期出现seg故障,我不太清楚。很难找到,只在10.4上出现了问题。您是否确认
volume_num
实际上是一个CFNumberRef
,它的类型是kCFNumberFloatType
?是的!在进行cfNumberTargetValue调用之前,将创建默认的CFNumberRef并将其添加到dict中。奇怪。你说的“默认CFNumberRef”是什么意思?一个充当默认值的CFNumberRef对象。在本例中,是一个值为1.0的kCFNumberFloatType类型。您能告诉我并在创建它的地方添加代码吗?