[英]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.