【发布时间】:2017-09-10 20:29:02
【问题描述】:
我正在尝试创建一个 N 元树,其中我有一个 char 数组 ex: {A,B,C,D} 要插入到树中。
我将根设置为“/”
如果命令是 mkdir /A/B/C => 在根目录创建节点 A,然后在 A 和 B 在 B 上创建节点。如果命令是 mkdir B/C/D =>在 C 中创建节点 D,等等...我简化了下面的代码,希望这里不会有任何错字。无论如何,在使用 gdb 进行调试时,看起来在到达搜索功能时会给我一个分段错误,我编写了下面的代码,我很确定插入功能也会有同样的错误,但我一直没能测试一下。
head.c
#pragma once
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define len 128
#define num 128
typedef struct tree{
char name;
char type;
struct node *child, *sibbling, *parentNode;
}node;
char *baseName[64];
node *root, *cwd;
树.c
node *createNode(node * newNode, char ch, char ty){
node *curNode = (node*)malloc(sizeof(node));
curNode->name = ch;
curNode->type = ty;
curNode->parentNode = newNode;
curNode->sibbling = curNode->child=NULL;
return curNode;
}
node * insertNode(node *parent, char name, char type){
if(parent->child == NULL){
parent->child=parent;
createNode(parent->child,name,type);
}
else{
parent->sibbling = parent;
createNode(parent->sibbling,name,type);
}
}
node *searchNode(node *curNode, char name){
if(curNode->name ==name){ <------------error here
return curNode;
}
if(name != curNode->name && curNode->sibbling != '\0'){
searchNode(curNode->sibbling, name);
}
if(name != curNode->name && curNode->child != '\0'){
searchNode(curNode->sibbling, name);
}
return 0;
}
void mkDir(){
int index = 0;
int flag =0;
int baseFlag=0;
node *pwd = root;
///// insert
while(dirName[index] !='\0'){
if(searchNode(root,dirName[index]) != NULL){ <-- error in this searchNode function //no node exist
// insertNode(pwd,"A","D"); <---this probably error too
printf("found A");
}
else{
//node exist
cwd = searchNode(root,dirName[index]);
insertNode(cwd,dirName[index],"D");
}
index++;
}
}
memset(dirName,'\0',sizeof(dirName));
}
【问题讨论】:
-
您写道:“我简化了下面的代码,希望这里不会有任何拼写错误”。你为什么不检查这个简化的代码是否编译并实际重现了问题?请阅读:minimal reproducible example
-
curNode->sibbling != '\0'){你在这里混淆了 NULL 和 0。 -
typedef struct tree{-->typedef struct node{
标签: c data-structures tree