从C中的另一个图中访问指向图形的指针

时间:2011-11-05 04:17:54

标签: c pointers struct

我正在尝试访问我的结构点。结构存储器是动态定位的。我得到了一个我无法弄清楚的分段错误。我的.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;

对他的问题的任何帮助都会很棒。提前谢谢。

2 个答案:

答案 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]
  ......等等