您好我在结构中定义结构数组时遇到了一些麻烦。 这是我的想法,我需要一个名为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;
答案 0 :(得分: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;
}
答案 1 :(得分: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()
。
希望它有所帮助!