gpt4 book ai didi

ios - 传递CGPoint *而不是CGPoint []无效吗?

转载 作者:行者123 更新时间:2023-12-01 19:24:18 24 4
gpt4 key购买 nike

我正在尝试使用生成CGPoints数组并返回指向该数组中第一个元素的指针的函数来简化我的代码。

CGPoint* getVerticesFromRect(const CGRect rect) {
CGPoint vertexArray[] =
{ ccp(rect.origin.x, rect.origin.y),
ccp(rect.origin.x + rect.size.width, rect.origin.y),
ccp(rect.origin.x + rect.size.width, rect.origin.y - rect.size.height),
ccp(rect.origin.x, rect.origin.y - rect.size.height) };
CGPoint *vertices = &vertexArray[0];
return vertices;
}

这可以正常工作,但是当我尝试在以下位置使用此CGPoint *时出现问题:
void ccDrawPoly( const CGPoint *poli, NSUInteger numberOfPoints, BOOL closePolygon )

像这样:
void ccDrawRect( const CGRect rect ) {
CGPoint *vertices = getVerticesFromRect(rect);
// Makes an array from the pointed CGPoints
CGPoint vertexArray[] = {vertices[0], vertices[1], vertices[2], vertices[3]};
ccDrawPoly(vertexArray, 4, YES); // This works
ccDrawPoly(vertices, 4, YES); // This doesn't
}

我发现尝试读取 *vertices中的 ccDrawRect变量会提供正确的值,但是当将其传递给 ccDrawPoly时,我却在另一端获取了垃圾值。这背后的原因是什么?据我所知,CGPoint * poli和CGPoint poli []应该相同。引起问题的是 const吗?

编辑

按照 here的建议,我更改了功能并传递了指针,现在工作正常。问题是要返回一个指针,该指针不会停留很长时间。取而代之的是,我使用了malloc并在不再需要调用者函数时释放了它的内存。
CGPoint* getVerticesFromRect(const CGRect rect) {
CGPoint *vertices = (CGPoint*) malloc(sizeof(CGPoint) * 4);
assert(vertices);

vertices[0] = ccp(rect.origin.x, rect.origin.y);
vertices[1] = ccp(rect.origin.x + rect.size.width, rect.origin.y);
vertices[2] = ccp(rect.origin.x + rect.size.width, rect.origin.y - rect.size.height);
vertices[3] = ccp(rect.origin.x, rect.origin.y - rect.size.height);

return vertices;
}

void ccDrawRect( const CGRect rect ) {
CGPoint *vertices = getVerticesFromRect(rect);
ccDrawPoly(&vertices[0], 4, YES);
free(vertices);
vertices = NULL;
}

最佳答案

您正在使用超出其范围的局部变量。

而不是像您那样在堆栈上分配数组:

CGPoint vertexArray[] = ...

您需要使用 malloc函数并创建动态分配的数组。当然,不要忘记对其进行 free编码。

(真的是C吗?)

关于ios - 传递CGPoint *而不是CGPoint []无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688085/

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