在做数据结构作业的时候,为了实现一个先序建树,我这么写:
int main()
{
BiTree *tree;
CreateBiTree(tree);
}
void CreateBiTree(BiTree *T)
{
char c;
cout<<"请输入建树元素:"<<endl;
cin >> c;
if( '#' == c)
{
*T = NULL;
}else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
但是遇到了这么一个鸟问题:
*T = (BiTree)malloc(sizeof(BiTNode));这行语句会让我段错误
然后上网查了查才发现,原来是我的二级指针没有初始化,因为我在main函数里这么写:
BiTree *tree;
CreateBiTree(tree);
然后我改成:
BiTree tree;
CreateBiTree(&tree);
这样就不用考虑什么初始化二级指针的鬼问题了,然后ok了。在指针的使用上,尽可能地别去显示地声明它,尤其是二级指针。