我正在尝试访问我的结构点。结构存储器是动态定位的。我得到了一个我无法弄清楚的分段错误。我的.h文件中的结构定义如下:
struct point{
double x;
double y;
};
struct figure{
char name[128];
int draw;
struct point *points;
};
extern struct figure *figures;
在我的.c文件中,我有:
struct figure *figures;
//initializing 10 figures
figures = malloc(10 * sizeof(struct figure));
//left the obvious NULL checking out for brevity
//I'm fairly sure this portion works for initializing 10 points for each figure
int i;
for(i = 0;i<10;i++){
figures[i].points = malloc(10 * sizeof(struct point));
//left out NULL checking again
}
除非在此之前检测到问题,否则这是我遇到麻烦的地方,实际上将值存储到点中。 注意:index可以是任何int&gt; = 0,只是为了简单起见使用通用术语
figures[index].points[index]->x = 10;
figures[index].points[index]->y = 15;
对他的问题的任何帮助都会很棒。提前谢谢。
答案 0 :(得分:1)
figures[index].points
是一个结构数组,这意味着索引它(即figures[index].points[index]
)会给你一个结构。最后两行应该是:
figures[index].points[index].x = 10;
figures[index].points[index].y = 15;
我很惊讶编译器不会抓住这个。
答案 1 :(得分:0)
除了您正在错误地访问内部结构之外,我在此代码中没有看到任何问题。
Online Demo 您的代码示例。
#include<string.h>
#include<stdio.h>
struct point{
double x;
double y;
};
struct figure{
char name[128];
int draw;
struct point *points;
};
int main()
{
struct figure *figures;
figures = malloc(10 * sizeof(struct figure));
int i = 0;
for(i = 0;i<10;i++)
{
figures[i].points = malloc(10 * sizeof(struct point));
figures[i].draw = i;
}
i = 0;
for(i = 0;i<10;i++)
{
printf("\nfigures[%d].draw = [%d]",i,figures[i].draw);
int j;
for(j = 0;j<10;j++)
{
figures[i].points[j].x = i;
figures[i].points[j].y = j;
printf("\nfigures[%d].points[%d].x = [%f]",i,j,figures[i].points[j].x);
printf("\nfigures[%d].points[%d].y = [%f]",i,j,figures[i].points[j].y);
}
}
return 0;
}
输出
数字[0] .draw = [0]
数字[0]。点[0] .x = [0.000000]
数字[0]。点[0] .y = [0.000000]
数字[0]。点[1] .x = [0.000000]
数字[0]。点[1] .y = [1.000000]
数字[0]。点[2] .x = [0.000000]
......等等