我有这样的结构:
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);
}
内写一些东西时,我有段错误,所以,据我所知,我在内存分配方面做错了。所以我无法理解如何以正确的方式做到这一点。
答案 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++;
}