带有指向自身的C结构 - 访问值

问题描述 投票:1回答:1

结构有问题。我必须使用一个具有指向自身的指针的结构。我这样做了,我觉得它有效:

typedef struct tag_t tag_t;
    struct tag_t{
    char name[15];
    int is_self_closing;
    tag_t *child;
};

我正在创建一个函数,将一个子项添加到标记中,比如“body”是html标记的子项,所以当我尝试使用“name”和“is_self_closing”时,我的程序核心被转储并导致分段错误子指针的变量。我不知道如何正确访问它们。这是该程序的完整代码。

#include <stdio.h>
#include <string.h>

typedef struct tag_t tag_t;
struct tag_t{
    char name[15];
    int is_self_closing;
    tag_t *child;
};

void add_chilld(tag_t *,char[15],int);

void print_markup(tag_t);

int main(int argc, char **argv){
    tag_t parent,child;
    strcpy(child.name,"body");
    child.is_self_closing = 1;
    strcpy(parent.name,"html");
    parent.is_self_closing = 0;
    add_chilld(&parent,child.name,child.is_self_closing);
    printf("child name = %s child closing = %d\n",child.name,child.is_self_closing);
    printf("%s %d %s\n",parent.name,parent.is_self_closing,parent.child->name);
    return 0;
}

void add_chilld(tag_t *parent,char name[15],int is_self_closing){
    if(is_self_closing == 1){
        printf("parent name = %s\n",parent->child->name);
        strcpy(parent->child->name,name);
        parent->child->is_self_closing = is_self_closing;
    }else{
        parent->child = NULL;
    }
}
c pointers struct
1个回答
0
投票

在你的add_chilld()函数中,你试图访问parent->child,但你从来没有指出任何有效的东西。

所以,你取消引用一个未初始化的指针,它包含一个不确定的值,即一个无效的内存地址,这会导致undefined behavior

换句话说,在你可以使用像parent->child->name这样的东西之前,你需要确保child变量的parent成员实际上设置为某个孩子(你之前分配的)。

© www.soinside.com 2019 - 2024. All rights reserved.