簡體   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