繁体   English   中英

C编程树树插入

[英]C programming trie tree insert

我刚开始编程并且有一个初学者的问题,我正在编写一个Trie插入函数,该函数将字符串插入到Trie树中。 但是,当我添加一个包含两个以上字符的字符串时,堆缓冲区溢出。 这是我的插入函数:

struct node* insert(struct node *root,char *c){
int i=0;
struct node *temp=root;
while(c[i]){
int index=c[i]-'a';
//New Node
struct node *n=malloc(sizeof(*n));
n=malloc(sizeof(struct node));
temp->child[index]=n;
i++;
temp=temp->child[index];
}
return root;
};

树节点的定义

struct node
{   
int isword;
int prefix;
int occurrence;
int leaf;
struct node * child[26];
};

以及我怎么称呼他们

char *c=malloc(3*sizeof(char));
c[0]='a';
c[1]='d';
c[2]='e';
struct node *root=malloc(sizeof(*root));
root=malloc(sizeof(struct node));
insert(root,c);

我认为这是我在错误的新节点的insert函数中分配空间的方式,但是我不确定避免堆缓冲区溢出的正确方法是什么,请问有什么建议吗?

c不是以nul结尾。 因此,如果i>=3 (可能是coredump,因为访问无效的内存地址),则c [i]是未定义的。 while(c[i])可能运行3次以上。 这也许是重点。

char *c=malloc(3*sizeof(char));
c[0]='a';
c[1]='d';
c[2]='e';

顺便说一句,下面的代码将导致内存泄漏:

struct node *root=malloc(sizeof(*root));
root=malloc(sizeof(struct node));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM