我正在尝试创建一个N-ary树,其中我有一个char数组ex:{A,B,C,D}以插入到树中。
我将root设置为“/”
如果命令是mkdir / A / B / C =>在根处创建节点A,然后在B处创建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;
tree.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));
}
答案 0 :(得分:0)
我怀疑您传入了对CREATE EVENT expired
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTES
DO
DELETE FROM your_table
WHERE login_expires < NOW();
函数的空节点引用,因此当您尝试访问属性searchNode
时,您将遇到段错误。
我建议在代码中测试和处理空引用。
答案 1 :(得分:0)
函数createNode
返回类型为node*
。在函数insertNode
中,您必须将address
new node
存储在{{1}类型的其他变量中}。
node*
在函数 node *r
r=createNode(parent->child,name,type);
....
...
中,您必须检查
searchNode
在最后一行中,您返回0但返回类型为 if(curnode!=NULL) {
if(curNode->name ==name){
return curNode;
}
}
返回node*
或NULL
。