2

こんにちは、構造内で構造の配列を定義するのに少し問題があります。これは私の考えです。図の名前、座標数、座標 (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;
}

このコードを使用すると、新しいFigureを作成するときにNewFigure( )、必要なパラメーターを指定して関数を呼び出すだけです。使い終わったら、と呼ばれReleaseMemory()ます。

それが役に立てば幸い!

于 2012-10-31T02:24:55.457 に答える