iphone - Malloc() 为单个结构创建空间,而不是为结构数组创建空间

标签 iphone objective-c struct malloc arrays

我一整天都在为这个问题苦苦思索,我将非常感谢任何可以提供帮助的人。

事情是这样的 - 我正在尝试使用 malloc() 创建一个动态 C 数组。该数组将保存 CGPoint 结构,我在构建数组后立即开始构建并分配该结构。代码如下:

CGPoint* tempVertices = malloc(sizeof(CGPoint) * 4);  //defining a collision frame
tempVertices[0] = CGPointMake(37, 46);
tempVertices[1] = CGPointMake(69, 40);
tempVertices[2] = CGPointMake(48, 6);
tempVertices[3] = CGPointMake(17, 10);

//Then I pass the pointer to my array off to a setter...
[self setVertices: tempVertices];

但是,当创建 tempVertices 时,我似乎只获得了一个 CGPoint 的空间:

int test1 = sizeof(CGPoint);        // 8
int test2 = sizeof(tempVertices);   // 4
int test3 = sizeof(*tempVertices);  // 8

当使用 XCode 调试器单步执行时,它显示 tempVertices 是一个指向 CGPoint 的指针。当我设置 tempVertices[0] 时,tempVertices 指向的 CGPoint 会收到该值,该值会反射(reflect)在调试器中。我的另外 3 个槽去哪儿了? tempVertices 似乎指向单个 CGPoint 而不是数组。我想要数组。

关于我做错了什么有什么想法吗?我知道还有其他方法可以使用 C++ 或其他对象来解决此问题,但如果可能的话我想坚持使用 C。

提前致谢!


更新:

为了回答 zpasternack,setVertices: 是一个自定义编写的 setter 。我不知道它如何/是否知道传入数组有多大。我试图更好地理解直接的 C 内容,因此非常感谢有关将动态 C 数组作为参数传递的正确方法的见解/解释。 setter 如下所示:

- (void) setVertices:(CGPoint*) val {
    _vertices = val;    //_vertices is a member variable of the type CGPoint* 
    //...calculate a centroid, other stuff...
}

如果需要,我可以将 CGPoints 包装在 NSValue 对象中并使用 NSArray 代替,但我确实想知道在普通 ol' C 中执行此操作的正确方法。

感谢所有发表评论的人 - 你们太棒了:)

最佳答案

在您的 32 位机器上,您将得到您所期望的结果。 sizeof(tempVertices) 是指针的大小,而 sizeof(*tempVerices) 给出 CGPint 的大小(可能是两个整数)。您无法使用 sizeof() 获取已分配数组的大小。该值仅在运行时才知道,并且 sizeof() 是一个编译时运算符。

关于iphone - Malloc() 为单个结构创建空间,而不是为结构数组创建空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195045/

相关文章:

iphone - 使用 AVQueuePlayer 强制/尊重 PlayItem 之间所需的间隙

objective-c - iOS didSelectRow 没有在连续选择时调用?

ios - 如何将 UIImageView 限制为最佳尺寸?

ios - 使用 iOS 应用程序的 Objective-C 创建 MS Excel 类型的电子表格

Beego Controller 中的 JSON 响应

iphone - 是否允许在单例类中为变量定义属性和综合?

iphone - 自定义UISlider(跟踪图片高度)

go - 为什么 Golang 需要接口(interface)?

function - 系统Verilog/Verilog : Is there a way to find the integer bit offset of a field of a packed struct?

iphone - 特殊字符的 NSPredicate - iPhone