Ios 传递CGPoint*而不是CGPoint[]无效?
我试图用一个函数来简化我的代码,该函数生成一个CGPoints数组,并返回指向该数组中第一个元素的指针Ios 传递CGPoint*而不是CGPoint[]无效?,ios,arrays,opengl-es,cocos2d-iphone,Ios,Arrays,Opengl Es,Cocos2d Iphone,我试图用一个函数来简化我的代码,该函数生成一个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
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
}
我发现,尝试读取ccDrawRect
中的*顶点
变量会给出正确的值,但在将其传递到ccDrawPoly
时,另一侧会得到垃圾值。这背后的原因是什么?据我所知,CGPoint*poli和CGPoint poli[]应该是相同的。问题是由常量引起的吗
编辑
按照建议,我更改了我的函数,现在传递指针可以正常工作了。问题是返回一个指向局部变量的指针,该变量不会停留太久。相反,我使用了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
函数并创建一个动态分配的数组。当然,别忘了免费
(它真的是C吗?在这种情况下,它应该是malloc
和free
。C,不是C++:)LOL,太长了,我想知道内存管理会在哪里出现。谢谢但是这如何解释为什么数组工作而指针不工作呢?纯粹是运气。当你做你所做的事情时,你会得到未定义的行为。它可以工作,也可以崩溃,尽管如此。