【发布时间】:2020-08-29 09:26:13
【问题描述】:
我正在尝试在 C 中实现一个可以有任意多个子节点的节点结构。我想通过使用指向结构的指针而不是使用数组来实现这个想法:
struct Node {
char name[10]; // Name of the node.
int data; // The data it holds.
struct Node *parent; // The parent node.
struct Node **child; //
};
(我不知道这是最好的还是好的,但我只是在玩玩以更好地学习 C)。
我还实现了一个打印成员的print 函数:
void print(struct Node node);
(我知道这只会打印一个节点,因此它不适用于具有多个子节点的节点)。
但是,当我尝试在 main 函数中使用它时,我得到一个 segmentation fault (core dump):
#include <stdio.h>
#include <stdlib.h>
struct Node {
char name[10]; // Name of the node.
int data; // The data it holds.
struct Node *parent; // The parent node.
struct Node **child; //
};
void print(struct Node node) {
printf("Name: %s\n", node.name);
printf("Data: %d\n", node.data);
printf("Parent: %s\n", (*node.parent).name);
printf("Children: %s\n", (**node.child).name);
}
int main() {
struct Node n1 = { "Parent", 1, NULL, NULL };
struct Node n2 = { "Child1", 2, &n1, NULL };
*n1.child = &n2;
print(n1);
print(n2);
return 0;
}
谁能看到我在这里做错了什么以及我应该怎么做?
亲切的问候,
编辑:
实际上我想要实现的是像这样创建子成员(我使用带有整数数组的示例来说明我的意思):
int *p = malloc(sizeof(int));
*p =1;
*(p+1)=2;
但不是 p 指向整数,而是指向指向结构节点的指针。这可行吗?
【问题讨论】:
-
n1.child 是一个空指针,因此您不能将任何内容分配给 它所指向的内存。
-
啊谢谢,那n1应该怎么初始化呢?