函数中的矩形是指向指针的指针。所以在使用它之前,您需要分配RectT项目的数组。它应该是这样的:
我正在尝试动态创建一个具有随机值的矩形数组。然而,当试图访问空间I malloc
时,我遇到了seg错误。
我的代码:
typedef struct Point
{
double x;
double y;
} PointT;
typedef struct Rect
{
PointT location;
char color;
double w; //width
double h; //height
} RectT;
main()
{
RectT *recs;
randRect(&recs);
}
void randRect(RectT **rects)
{
int i;
rects =malloc(numRec*sizeof(RectT*));
for(i = 0; i < numRec-1; i++)
{
rects[i]->w=rand()%20;
rects[i]->h=rand()%20;
rects[i]->location.x=rand()%20;
rects[i]->location.y=rand()%20;
}
}
numRec
定义为50
void randRect(RectT **rects)
{
int i;
*rects =malloc(numRec*sizeof(RectT));
for(i = 0; i < numRec; i++)
{
(*rects)[i].w=rand()%20;
(*rects)[i].h=rand()%20;
(*rects)[i].location.x=rand()%20;
(*rects)[i].location.y=rand()%20;
}
}
或者更好的方式:
Rect* randRect()
{
int i;
Rect* rects =malloc(numRec*sizeof(RectT));
for(i = 0; i < numRec; i++)
{
rects[i].w=rand()%20;
rects[i].h=rand()%20;
rects[i].location.x=rand()%20;
rects[i].location.y=rand()%20;
}
return rects;
}
为RectT
指针的数组分配空间,但从不为它们指向的RectT
s分配空间。
您需要为矩形分配空间,而不是为指向矩形的指针分配空间:
void randRect(RectT **rects) }
*rects = malloc(numRec * sizeof(RectT));
for (size_t i = 0; i != numRec; ++i) {
(*rects)[i]->w = 0; // etc
}
}