C 不会进入我的功能
我是C编程的初学者。我目前正在尝试使用数组实现一个特殊的树。 当执行我的代码时,它停止说:进程结束,退出代码为11(分段错误)。出于某种原因,它在进入函数newTree之前停止。目前,我的程序所做的唯一事情是:它首先显示菜单,然后要求用户进行选择。之后,它要求用户输入根名称和值。由于某种原因,它会出现分段错误 这是我当前的代码:C 不会进入我的功能,c,function,tree,segmentation-fault,C,Function,Tree,Segmentation Fault,我是C编程的初学者。我目前正在尝试使用数组实现一个特殊的树。 当执行我的代码时,它停止说:进程结束,退出代码为11(分段错误)。出于某种原因,它在进入函数newTree之前停止。目前,我的程序所做的唯一事情是:它首先显示菜单,然后要求用户进行选择。之后,它要求用户输入根名称和值。由于某种原因,它会出现分段错误 这是我当前的代码: //struct typedef struct Tree { char *name; char *value; _Bool isLeaf; } Node; //arr
//struct
typedef struct Tree {
char *name;
char *value;
_Bool isLeaf;
} Node;
//array
Node *tree;
//defining my functions
void newTree(Node n);
void add_child(Node n1, Node n2, int child_loc);
int main(void){
//menu
printf("The Tree Data Structure\n");
printf("Choose one of the following options: \n");
printf("1.Create a new tree consisting just of the root node n \n");
printf("2.Add a new child node to n \n");
printf("3.Prune \n");
printf("4.List Children \n");
printf("5.Traverse \n");
printf("6.Graft \n");
printf("7.Search \n");
printf("Option: ");
Node n, n1, n2;
//creating all nodes
for(int i=0; i<781; i++){
Node i = {(char*)malloc(sizeof(char)*16), (char*)malloc(sizeof(char)*80), 0};
}
int option;
scanf("%d", &option);
switch(option){
case 1:
printf("Enter root name: ");
scanf("%s", n.name);
printf("Enter root value: ");
scanf("%s", n.value);
//my problem
newTree(n);
break;
//other cases
default: printf("Incorrect option");
break;
}
return 0;
}
void newTree(Node n) {
strcpy(tree[0].name,n.name);
strcpy(tree[0].value,n.value);
int first_child_loc;
first_child_loc = 0;
//0 because first tree: tree[0]
first_child_loc = (0*5)+1;
if(strcmp("",tree[first_child_loc].name) == 0){
n.isLeaf = 1;
}else{
n.isLeaf = 0;
}
tree[0].isLeaf = n.isLeaf;
}
//结构
类型定义结构树{
字符*名称;
字符*值;
_布尔岛;
}节点;
//排列
节点*树;
//定义我的功能
void-newTree(节点n);
void add_child(节点n1、节点n2、int child_loc);
内部主(空){
//菜单
printf(“树数据结构”);
printf(“选择以下选项之一:\n”);
printf(“1.创建一个只包含根节点n\n的新树”);
printf(“2.将新的子节点添加到n\n”);
printf(“3.Prune\n”);
printf(“4.列出子项\n”);
printf(“5.1.1”);
printf(“6.1.1\n”);
printf(“7.Search\n”);
printf(“选项:”);
节点n,n1,n2;
//创建所有节点
对于newTree
中的(int i=0;i),您可以在strcpy
调用中访问tree[0]
,但从未为其分配内存。
tree
只是一个全局指针,您可以将其声明为数组,或者如果需要在运行时更改大小,您可以在newTree
中使用malloc,您可以在strcpy
调用中访问tree[0]
,但从未为其分配内存。
//creating all nodes
for(int i=0; i<781; i++){
Node i = {(char*)malloc(sizeof(char)*16), (char*)malloc(sizeof(char)*80), 0};
}
tree
只是一个全局指针,您可以将其声明为数组,或者如果需要在运行时更改大小,可以使用malloc
//creating all nodes
for(int i=0; i<781; i++){
Node i = {(char*)malloc(sizeof(char)*16), (char*)malloc(sizeof(char)*80), 0};
}
还没有测试
尚未测试。您提供了指针“树”而不是数组“树”。您必须为指针“树”分配足够的内存,使其成为数组。您可以通过添加以下代码来完成此操作
tree=(Node*)malloc(数组的大小*节点的大小));
这将形成一个元素数为“大小数组”的数组。
也在for循环中声明i,但我认为在像前面所说的那样分配内存后,不需要循环。您提供了指针“tree”而不是数组“tree”。您必须为指针“tree”分配足够的内存,使其成为数组。您可以通过添加以下代码来完成此操作
tree=(Node*)malloc(数组的大小*节点的大小));
这将形成一个元素数为“大小数组”的数组。
也在for循环中声明i,但我认为在分配完前面所说的内存后,不会需要该循环。您可能对本次讨论感兴趣(这与您的问题没有直接关系)。虽然我找不到名为createTree
的函数,但我假定您的意思是newTree
。我假定您的代码打印输入根值:
。请更具体地说明您的预期行为和实际行为。程序中的Node*tree仅声明“tree”作为指针。您必须将内存分配给树,使其成为数组。另外,我不明白一件事,通过创建数组并存储值,不能使其成为树。树中的每个节点之间必须有一些链接。您可能对本讨论感兴趣(这与您的问题没有直接关系)。虽然我找不到名为createTree
的函数,但我假定您的意思是newTree
。我假定您的代码打印输入根值:
。请更具体地说明您的预期行为和实际行为。程序中的Node*tree仅声明“tree”作为指针。您必须为树分配内存,使其成为数组。另外,我不明白一件事,通过创建数组并存储值,不能使其成为树。树中的每个节点之间必须有某种链接。我做了类似的操作,但出于某种原因,它只显示了“输入根名称”。对于以前的版本,虽然没有意义,但它允许我在“输入根值”之后输入值。我做了类似的操作,但出于某种原因,它只显示了“输入根名称”。对于以前的版本,尽管没有意义,但它允许我在“输入根值”之后输入值。