分割故障-C中的动态阵列



我正在尝试动态创建一个具有随机值的矩形数组。然而,当试图访问空间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

函数中的矩形是指向指针的指针。所以在使用它之前,您需要分配RectT项目的数组。它应该是这样的:
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指针的数组分配空间,但从不为它们指向的RectTs分配空间。

您需要为矩形分配空间,而不是为指向矩形的指针分配空间:

void randRect(RectT **rects) }
  *rects = malloc(numRec * sizeof(RectT));
  for (size_t i = 0; i != numRec; ++i) {
    (*rects)[i]->w = 0; // etc
  }
}

相关内容

  • 没有找到相关文章

最新更新