Я только начал программировать и задать вопрос начинающему, я пишу функцию вставки три, которая вставляет строку в дерево trie. Но когда я добавляю строку с более чем двумя символами, я получаю переполнение буфера кучи. Вот моя вставка функция:C программирование trie tree insert
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);
Я думаю, что это, как я выделить пространство в функции вставки для новый узел, который поступил не так, но я не уверен, что это правильный способ избежать переполнения буфера кучи, любые советы, пожалуйста?
Так что я должен сделать что-то вроде с [3] = '\ 0' ;? – woshidashen
и для выделения памяти предполагается, что это узел struct * root = (struct node *) malloc (sizeof (struct node)); вместо этого? – woshidashen
@GhostKidYao 1. да, но почему бы не 'char * c =" ade ";', так как 'c' только для чтения? 2. Да. – zzn