我有一个结构CGPoint的c数组。当另一个CGPoint被添加时,我需要替换这个数组。我发誓我正在做这件事,它似乎很好,但最终我会得到一个EXC_BAD_ACCESS
。我错过了什么?EXC_BAD_ACCESS在结构中传递指针指针时?
下面是结构,我已经截断删除了许多不属于的项目。
typedef struct{
CGPoint **focalPoints;
NSUInteger focalPointCount;
CGRect boundingRect;
}FocalPoints;
以下是我初始化:
CGPoint *fPoints = (CGPoint *)malloc(sizeof(CGPoint));
FocalPoints focalInfo = {&fPoints, 0, rect};
注意focalInfo
通过引用传递给另一个函数,就像这样:anotherFunction(&focalInfo)
。
现在,这里的该用新的替换点阵列的功能:
void AddFocalPoint (CGPoint focalPoint, FocalPoints *focal){
if (focalPoint.x == CGFLOAT_MAX) return;
if (!CGRectContainsPoint(focal->boundingRect, focalPoint)) return;
int origCount = focal->focalPointCount;
int newCount = origCount + 1;
CGPoint *newPoints = (CGPoint *) malloc((newCount) * sizeof(CGPoint));
for (int i = 0; i < newCount; i++)
newPoints[i] = (i < origCount) ? *focal->focalPoints[i] : focalPoint; //error occurs here
free(*focal->focalPoints);
*focal->focalPoints = newPoints;
focal->focalPointCount = newCount;
}
在第8行上述代码时出现错误EXC_BAD_ACCESS:newPoints[i] = (i < origCount) ? *focal->focalPoints[i] : focalPoint;
。那么我究竟做错了什么?
我不知道全部,但我认为newPoints [i]是一个CGPoint,而* focal-> focalPoints [i]是一个CGPoint指针... – FrankieTheKneeMan 2012-03-19 20:45:42
你有没有考虑使用链表,甚至'NSMutableArray' /'NSValue',这样你就不会在每次添加一个点时分配,复制和释放整个东西? – 2012-03-19 20:49:40
fPoints的原始malloc未在技术上使用。但是我分配空间是因为AddFocalPoint函数会自由调用它,并且我不想释放未被malloc'd的空间。 '&fPoints'为fPoints添加一个额外的指针。我这样做是因为我相信这是取代c-array的唯一方法。 – 2012-03-19 20:49:43