我应该如何分配我的结构(指向结构数组的指针)?

时间:2018-04-11 18:27:32

标签: c arrays memory-management struct

我有这样的结构:

egg

我想在 typedef struct s_points { double x; double y; double z; int color; } t_points; typedef struct s_map { int width; int height; t_points ***points; } t_map; 内阅读并存储2D数组,但我不知道如何正确分配它。 这是我的代码(在map-> width和map-> height i存储输入数组的宽度和高度):

***points;

它有效,但是当我尝试在t_map *validate(int fd, char *av) { int lines; int j; char *tmp; t_map *map; t_points **tmp_p; j = 0; if (!(map = (t_map*)malloc(sizeof(t_map)))) error("ERROR: malloc error"); if ((!(map->points = (t_points***)malloc(sizeof(t_points**) * map->height))) error("ERRROR!"); while((get_next_line(fd, &tmp)) > 0) //get_next_line will read input line by line { if (!(map->points[j] = (t_points**)malloc(map->width * sizeof(t_points*)))) error("ERROR: malloc error"); /* Some other code */; j++; } return(map); } 内写一些东西时,我有段错误,所以,据我所知,我在内存分配方面做错了。所以我无法理解如何以正确的方式做到这一点。

1 个答案:

答案 0 :(得分:1)

points中有一个太多的间接层。对于一个指针数组,您需要一个级别,对于t_points数组,需要一个级别:

typedef struct s_map
{
    int         width;
    int         height;
    t_points    **points;
}               t_map;

然后分配如下:

if ((!(map->points = malloc(sizeof(t_points*) * map->height)))
    error("ERRROR!");
while((get_next_line(fd, &tmp)) > 0)   //get_next_line will read input line by line
{
    if (!(map->points[j] = malloc(map->width * sizeof(t_points))))
        error("ERROR: malloc error");
    /* Some other code */;
    j++;
}

另外,don't cast the return value of malloc