我遇到了结构问题。我必须使用一个具有指向自身的指针的结构。我已经这样做了,我认为它有效:
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;
}
}
答案 0 :(得分:0)
在add_chilld()
功能中,您试图访问parent->child
,但您从未指出任何有效的内容。
所以,你取消引用一个未初始化的指针,该指针包含一个不确定的值,即一个无效的内存地址,导致undefined behavior
换句话说,在使用parent->child->name
之类的内容之前,您需要确保child
变量的parent
成员实际设置为某些孩子(你之前分配的)。