我怎么能有一个包含自身类型的结构呢?
struct node { struct node *nodes[MAX]; int ID; };
struct node *node1, *node2;
node1 = (struct node*) malloc(sizeof(struct node));
node2 = (struct node*) malloc(sizeof(struct node));
node1->ID = 1;
node2->ID = 2;
node1->nodes[0] = node2;
node2->nodes[0] = node1;没有错误,但程序没有正确执行。
编辑:我已经添加了更多的代码。
最终:我创建了无限递归,这是我的一个错误。我将继续删除此威胁。很抱歉让你久等了。
发布于 2013-02-12 10:39:23
这是因为您存储的是指向结构的指针数组。这是完全不同的。
你不能在其内部拥有相同的结构。这将是一个无限递归的定义。
现在,如果你能展示更多你的程序,我们也许能够帮助你理解为什么你的程序没有按照你期望的方式运行。你可能没有初始化指针,因为你对它们到底是什么感到困惑。
编辑现在你已经发布了一些代码,忽略了你还没有说出到底哪里出了问题,我希望你在检查你的图的时候试图迭代整个指针列表,但是你从来没有初始化过它。
当你malloc的时候,内存将是未初始化的。C中的标准实践是使用calloc,这会将所有字节设置为零。由于您似乎将nodes数组用作列表,因此可能需要向节点添加一个num_edges字段,并创建一个函数在两个节点上执行双向联接。
struct node {
int num_edges;
struct node *nodes[MAX];
};
int join( struct node *a, struct node *b )
{
if( a->num_edges >= MAX || b->num_edges >= MAX ) return 0;
a->nodes[a->num_edges++] = b;
b->nodes[b->num_edges++] = a;
return 1;
}您还可以测试从a到b是否存在优势,如下所示:
int has_edge( struct node *a, struct node *b )
{
int i;
for( i = 0; i < a->num_edges; i++ ) {
if( a->nodes[i] == b ) return 1;
}
return 0;
}发布于 2013-02-12 10:40:32
你的代码是完全有效的-在结构中有指向相同结构的指针是可以的。
https://stackoverflow.com/questions/14824563
复制相似问题