Извините за мой плохой английский, я написал код C для дерева Splaying, но когда я положил операцию «Найти()» в основной функции, я не смог инициализировать Tree, то есть , без строки «Найти()», используя GDB, я обнаружил, что значение my_tree равно «0x0», когда точка останова в строке «MakeEmpty», но добавьте строку «Найти», значение «0x7fffffffbeb0». Я знаю, что функция Find() имеет проблему, но я не понимаю, почему последние утверждения заражают прежнее утверждение?C адрес указателя очень странный
#include<stdio.h>
#include "SPTree.c"
void main()
{
Position my_tree;
my_tree = MakeEmpty(my_tree);
my_tree = Insert(5, my_tree);
my_tree = Insert(6, my_tree);
Position P = Find(5, &my_tree);
}
Вот заявление
struct SPNode;
typedef struct SPNode *Position;
typedef struct SPNode *SPTree;
typedef int ElementType;
и узел дерева
struct SPNode
{
ElementType Element;
SPTree Left;
SPTree Right;
};
Это Вставьте
SPTree Insert(ElementType X, SPTree tree)
{
if(tree == NULL)
{
//此时 tree 是一棵空树,分配空间并创建一棵树
tree = malloc(sizeof(struct SPNode));
if(tree == NULL)
printf("Out of space!!!\n");
else
{
tree->Element = X;
tree->Left = tree->Right = NULL;
}
}
else
{
//递归插入 X 到合适的子树中
if(X < tree->Element)
tree->Left = Insert(X, tree->Left);
else if(X > tree->Element)
tree->Right = Insert(X, tree->Right);
else
//X已经在树中,什么也不做
;
}
return tree;
}
и это найдете в моем GitHub репо (потому что он слишком длинный): https://github.com/hengyicai/Find/blob/master/Find.c
Что я путать: когда основная функция как этот
void main()
{
Position my_tree; //line 1
my_tree = MakeEmpty(my_tree);
my_tree = Insert(5, my_tree);
my_tree = Insert(6, my_tree);
}
Я отладки для точки останова в строке 1, и напечатать значение my_tree является 0x0, как показано ниже
смотрите здесь: " https://raw.githubusercontent.com/hengyicai/Find/master/ "см. Pic_1.png.
, но после того, как добавить Find() finction в main.c
#include<stdio.h>
#include "SPTree.c"
void main()
{
Position my_tree;
my_tree = MakeEmpty(my_tree);
my_tree = Insert(5, my_tree);
my_tree = Insert(6, my_tree);
Position P = Find(5, &my_tree);
}
я получаю значение my_tree так: смотрите на Pic_2.png в приведенной выше ссылке.
Почему значение my_tree отличается от предыдущего, просто добавьте Find() в последнюю строку?
без кода для других функций, трудно сказать – thumbmunkeys
0x7fffffffbeb0: Похоже, это выделено в стеке, но сказать сложно. Попробуйте 'int x; printf ("% p", &x); '- он даст вам адрес в стеке – 18446744073709551615
Зачем вам нужен адрес' & 'для' Find() ', но не для' Insert() '? –