在C中访问Structs中的结构

时间:2011-11-19 18:32:18

标签: c list struct tree linked-list

这是一个非常简短的问题,实际上源自另一篇文章,如果我要从我的TreeNode中访问我的ListNode中的char *号码,以便每个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和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;

3 个答案:

答案 0 :(得分:1)

问题是你传递了一个指向ListNode的指针,但随后正在对ListNode进行mallocing,分配给它,而不是对它做任何事情。我不确定你的意图是什么:

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;

答案 1 :(得分:0)

如果您没有忘记那里的ListNode的malloc(),那就是要走的路!

答案 2 :(得分:0)

我认为root->numbers->number导致了段违规,在您取消引用之前,似乎没有将root->numbers设置为指向任何内容。