gpt4 book ai didi

iphone - Malloc 到 CGPoint 指针在访问时抛出 EXC_BAD_ACCESS

转载 作者:太空狗 更新时间:2023-10-29 16:04:39 26 4
gpt4 key购买 nike

我正在尝试使用 Apple 编程指南中的一段代码,在执行 malloc 后立即尝试将指针传递给函数时,我得到了 EXC_BAD_ACCESS。

(供引用:iPhone Application Programming Guide: Event Handling - Listing 3-6)

有问题的代码非常简单:

CFMutableDictionaryRef touchBeginPoints;
UITouch *touch;

....

CGPoint *point = (CGPoint *)CFDictionaryGetValue(touchBeginPoints, touch);

if (point == NULL)
{
point = (CGPoint *)malloc(sizeof(CGPoint));
CFDictionarySetValue(touchBeginPoints, touch, point);
}

现在,当程序进入 if 语句时,它会将 malloc 的“输出”分配给 point 变量/指针。

然后,当它尝试将 point 传递给 CFDictionarySetValue 函数时,它会导致应用程序崩溃:Program received signal: “EXC_BAD_ACCESS”。

有人建议不要执行 malloc 并将 point var/pointer 传递为:&point,但是这仍然给了我一个 EXC_BAD_ACCESS.

我(看起来像 Apple)做错了什么???

提前致谢。

最佳答案

Sean 的回答基本正确。根据the documentation for CFDictionarySetValue ,它将根据 CFMutableDictionaryRef 的设置方式尝试保留 值。我猜想当您创建可变字典时(大概使用 CFDictionaryCreateMutable()),您没有为 how to handle setting and removing values 提供自定义回调.

编辑:

提供自定义回调的另一种选择是为值回调提供 NULL:

CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, NULL);

CGPoint * point = (CGPoint *)malloc(sizeof(CGPoint));
point->x = 42;
point->y = 42;

CFDictionarySetValue(dict, @"foo", point);


CGPoint * newPoint = CFDictionaryGetValue(dict, @"foo");
NSLog(@"%f, %f", newPoint->x, newPoint->y);

日志:

2010-06-17 11:32:47.942 EmptyFoundation[45294:a0f] 42.000000, 42.000000

关于iphone - Malloc 到 CGPoint 指针在访问时抛出 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com