只是一个非常简短的问题,真的源于另一个帖子,如果我要访问我的ListNode中的char *数字,从我的TreeNode中,这样每个TreeNode都有自己的数字链表,我会按照以下方式访问它吗(其中TreeNode *根):
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和List到该节点:
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
,分配给它,而不是用它做任何事情。我不知道你的意图是什么:
list = (ListNode *)malloc(sizeof(ListNode));
段故障的原因是您malloc了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;
如果您没有忘记malloc() ListNode在那里,这是一种方法!
我认为root->numbers->number
导致了段冲突,在取消引用之前,您似乎没有设置root->numbers
指向任何东西