我正在尝试使用malloc为几个结构分配内存。我完成了我的研究但却找不到任何对我有帮助的东西。以下是结构:
typedef struct _square
{
char figure;
int num_neighbors;
struct _square *neighbors[7];
} point;
typedef struct_plot
{
int num_squares;
struct _square *dots;
} plot;
指针*点应该指向正方形指针数组的第一个元素(* neighbors [7]),num_squares的值是函数的输入。
有人有什么想法吗?
编辑: 这是我一直在尝试的:
plot* plot_create(int size)
{
plot *newPlot;
square * square_neighbors[8];
if((newPlot = (plot *)malloc(sizeof(plot))) == NULL)
{
printf("Allocation error");
return NULL;
}
if((square_neighbors = (node *)malloc(size*sizeof(square))) == NULL)
{
printf("Allocation error 2");
return NULL;
}
return newPlot;
}
答案 0 :(得分:1)
指针*点应该指向数组的第一个元素 指向正方形的指针(* neighbors [7])
不,它不应该......指向邻居的第一个元素的指针的类型是struct _square **
,而不是struct _square *
。
在您的编辑中,您将malloc
的结果转换为(node *)
,这不是声明的类型,然后您尝试将其分配给square_neighbors
,这是一个数组,无法分配。它是一个8 square*
的数组,但没有宣布这样的类型。在将其分配给该局部变量后,您将返回而不使用该值,从而泄漏内存。同样在您的原始代码中,您有typedef struct_plot
,这是一个错字。
请在向SO发布问题之前,通过编译器运行代码并修复拼写错误及其报告的其他错误和警告。完成后,我们可以尝试解决您的概念错误。
答案 1 :(得分:1)
这应该澄清你正在尝试做什么。在下面的代码中,我们首先分配一个指向点对象的8个指针的数组(struct _squares)。然后,我们为每个点对象分配内存并根据需要对其进行初始化。
您可以访问此数据结构,如图所示。请注意,这不一定是连续分配内存(因为多次调用malloc)。
#include <stdio.h>
typedef struct _square
{
char figure;
int num_neighbors;
struct _square *neighbors[7];
} point;
typedef struct _plot
{
int num_squares;
struct _square *dots;
} plot;
int main(void)
{
int i;
point** residents = malloc(8 * sizeof(point*));
for (i = 0; i < 7; i++)
{
residents[i] = malloc(sizeof(point));
}
residents[0]->figure = 'A';
residents[1]->figure = 'B';
residents[0]->neighbors[0] = residents[1];
printf("First neighbor of %c is %c\n",
residents[0]->figure,
residents[0]->neighbors[0]->figure);
return 0;
}
First neighbor of A is B