Есть как минимум две следующие проблемы:
Первая проблема:
AVLTreeNode *CloneAVLTreeNode(AVLTreeNode *r)
{
AVLTreeNode *n; // here you declare n, but n just points nowhere
if (r == NULL) return NULL;
else
{
n->key = r->key; // here n still points nowhere,
// therefore dereferencing it causes the Bus error.
n->value = r->value;
n->height = r->height;
n->parent = r->parent;
n->left = CloneAVLTreeNode(r->left);
n->right = CloneAVLTreeNode(r->right);
return n;
}
}
Вы, вероятно, хотите это:
AVLTreeNode *CloneAVLTreeNode(AVLTreeNode *r)
{
if (r == NULL) return NULL;
else
{
AVLTreeNode *n = malloc(sizeof AVLTreeNode); // allocate memory for new node
n->key = r->key;
n->value = r->value;
n->height = r->height;
n->parent = r->parent;
n->left = CloneAVLTreeNode(r->left);
n->right = CloneAVLTreeNode(r->right);
return n;
}
}
Вторая проблема:
AVLTree *CloneAVLTree(AVLTree *T)
{
AVLTree *New = malloc(sizeof(AVLTree));
//AVLTree *New;
AVLTreeNode *p = New->root; // here New->root hasn't been initialized either
// so p will point nowhere either
AVLTreeNode *n = T->root;
if (n == NULL) return NULL;
else
{
p = CloneAVLTreeNode(n); // but here you assign p with another value, so the previous 'p = New->root'
// is pointless anyway.
}
return New;
}
Скорее всего, в другом месте больше ошибок.