这只是一个非常简短的问题,实际上源于另一篇文章,如果我要从我的 TreeNode 访问 ListNode 中的 char *number,以便每个 TreeNode 都有自己的数字链接列表,我是否可以将其访问为如下(其中 TreeNode *root):
root->name = strdup(name); root->numbers->number = strdup(number);
干杯!
typedef struct ListNode {
char *number;
struct ListNode *next;
}ListNode;
typedef struct TreeNode {
char *name;
ListNode *numbers;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
编辑:这是我向该节点添加 TreeNode 和列表的函数:
int main(void) {
char my_string[50], name[25], number[25];
TreeNode *root = NULL;
ListNode *list = NULL;
while ((fgets(my_string, 50, stdin)) != NULL) {
if (my_string[0] == '.')
break;
sscanf(my_string, "%s %s", name, number);
root = AddNode(root, list, name, number);
}
return 0;
}
TreeNode* AddNode(TreeNode *root, ListNode *list, char *name, char *number) {
int comparison;
if ( root == NULL) {
root = (TreeNode *)malloc(sizeof(TreeNode));
list = (ListNode *)malloc(sizeof(ListNode));
root->name = strdup(name); root->numbers->number = strdup(number);
root->left = root->right = NULL;
最佳答案
问题是您传递了一个指向 ListNode
的指针,但随后对 ListNode
进行了 malloc,分配给它,但没有对它执行任何操作。我不确定你的意图是什么:
list = (ListNode *)malloc(sizeof(ListNode));
出现段错误的原因是您分配了一个 TreeNode
,但没有分配其中的 ListNode
。你需要做的是:
root = (TreeNode *)malloc(sizeof(TreeNode));
root->numbers = (ListNode *)malloc(sizeof(ListNode));
或者,如果这就是您打算对 malloc 的 ListNode
执行的操作,则需要对其进行分配:
root = (TreeNode *)malloc(sizeof(TreeNode));
list = (ListNode *)malloc(sizeof(ListNode));
root->numbers = list;
关于c - 在 C 中访问结构体中的结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196262/