2

嗨,我在定义结构中的结构数组时遇到了一些麻烦。这是我的想法,我需要一个名为 figure 的结构,其中包含图形的名称、坐标计数和坐标 (x,y)。每个图形可以有任意数量的坐标。我还需要能够为不断增加的坐标列表动态重新分配空间......请帮助我指出正确的方向。谢谢你,

泰勒

typedef struct {
  char fig_name[FIGURE_LEN + 1];
  int coordcount;
  /* here i need to declare an array of coord structures that 
     but i am not sure how to do this properly. I was originally
     going to try something like as follows */
  coords *pointer;
  pointer = malloc(sizeof(coords));
  pointer = coords figcoord[];
  /* however i am quite certain that this would not work */
} figure;

typedef struct {
  double x;
  double y;
} coords;
4

2 回答 2

1

朝正确的方向踢。尝试这样的事情。我很抱歉没有对malloc()调用进行错误检查,但你会得到大致的想法(我希望):

#include <stdlib.h>

#define FIGURE_LEN  128

typedef struct
{
    double x;
    double y;
} coords;

typedef struct
{
    char fig_name[FIGURE_LEN + 1];
    int coordcount;
    coords *pointer;
} figure;


/* allocate a dynamic allocated figure */
figure* alloc_figure(char* name, int coordcount)
{
    figure *fig = malloc(sizeof(figure));
    fig->coordcount = coordcount;
    fig->pointer = malloc(sizeof(coords) * coordcount);
    strncpy(fig->fig_name, name, FIGURE_LEN);
    fig->fig_name[FIGURE_LEN] = 0;
    return fig;
}

/* release a dynamic allocated figure */
void free_figure(figure** ppfig)
{
    if (!*ppfig)
        return;

    free((*ppfig)->pointer);
    free(*ppfig);
    *ppfig = NULL;
}

int main(int argc, char *argv[])
{
    figure fig;
    fig.coordcount = 10;
    fig.pointer = malloc(10 * sizeof(coords));

    /* access fid.pointer[0..9] here... */
    fig.pointer[0].x = 1.0;
    fig.pointer[0].y = 1.0;

    /* don't  forget to free it when done */
    free(fig.pointer);

    /* dynamic allocation function use */
    figure *fig1 = alloc_figure("fig1", 10);
    figure *fig2 = alloc_figure("fig2", 5);

    fig1->pointer[9].x = 100.00;
    fig2->pointer[0].y = fig1->pointer[9].x;

    /* and use custom free function for releasing them */
    free_figure(&fig1);
    free_figure(&fig2);

    return EXIT_SUCCESS;
}
于 2012-10-31T02:22:24.457 回答
1

我认为这样的事情应该有效。

typedef struct {
  char* figNamePtr;
  int coordCount;
  Coords *cordsPointer;
  //void (*ReleaseMemory)(); // create this function.
} Figure;

typedef struct {
  double x;
  double y;
} Coords;

Figure * NewFigure(int coordCount){
    Figure * retVal = (Figure *) malloc(sizeof(Figure));

    /* Initialize Figure */
    retVal->figNamePtr = (char *) malloc(sizeof(char) * (FIGURE_LEN + 1));

    /* Set the Function pointer, 
       create a function named ReleaseMemory that free up the memory */
    //retVal->ReleaseMemory = ReleaseMemory;

    retVal->cordCount = coordCount

    retVal->cordsPointer = malloc(sizeof(Coords) * coordCount);

    return retVal;
}

使用此代码,当您想创建一个新图形时,只需调用NewFigure( )带有必要参数的函数即可。使用完毕后,调用ReleaseMemory().

希望能帮助到你!

于 2012-10-31T02:24:55.457 回答