Ошибка при вставке в дерево AVL

Я получаю ошибку при выполнении вставки в дерево AVL. Программа падает, когда входит в функцию вставки. Я читаю некоторые имена файлов из текстового файла и передаю их этой функции insert_data, которая затем вызывает insert_node. Это мои функции

void DataStructure::insert_data(char * &fileName, long int address)
{
this->root =  this->insert_node(this->root, fileName, address);
}node * DataStructure::insert_node( node *t, char * &file_name, long int address)
{
if(t==NULL)
{
t = new node;
t->address = address;
strcpy(t->buffer, file_name);
t->height = 0;
t->left = NULL;
t->right = NULL;
}
else if(atoi(file_name) < atoi(t->buffer))
{
t->left = insert_node(t->left, file_name, address);
if(get_height(t->left) - get_height(t->right) == 2)
{
if(atoi(file_name) < atoi(t->left->buffer))
t=SingleRotationLeft(t);
else
t=DoubleRotationLeft(t);
}
}
else if( atoi(file_name) > atoi(t->buffer))
{
t->right = insert_node(t->right, file_name, address);
if(get_height(t->right) - get_height(t->left) == 2)
{
if(atoi(file_name) > atoi(t->right->buffer))
t= SingleRotationRight(t);
else
t=DoubleRotationRight(t);
}
}

t->height = max_height(get_height(t->left), get_height(t->right)) + 1;
return t;
}

и моя строительная функция

DataStructure::DataStructure(void)
{
root = NULL;
}

0

Решение

strcpy(t->buffer, file_name);

пишет в неинициализированный указатель. Вы должны выделить память для buffer, Если вы используете Posix-совместимую систему, самый простой способ сделать это — использовать strdup

t->buffer = strdup(file_name);

В противном случае вам нужно выделить память, а затем скопировать отдельно

t->buffer = malloc(strlen(file_name)+1);
strcpy(t->buffer, file_name);

В любом случае вам нужно free(t->buffer) когда вы освобождаете память для каждого node

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector