user-0 提问: 二叉排序树构建程序崩溃?

回复:
user: user-0
content: main函数已加上返回值

user: user-1
content: 引用 16 楼 may_Xia 的回复:[quote=引用 15 楼 paschen 的回复:] [quote=引用 14 楼 may_Xia 的回复:] [quote=引用 13 楼 paschen 的回复:] 我上面发的你没全改啊  int createSearchTree(PBinSearchTree ptree)  改成：  int createSearchTree(PBinSearchTree* ptree)     编译成功，但运行崩溃……[/quote]  去掉*ptree=NULL;那句[/quote]   依旧................................我都不好意思问了......................................................................[/quote]  其他几个函数也类似问题啊，我出错可以断下来分析什么原因

user: user-0
content: 引用 15 楼 paschen 的回复:[quote=引用 14 楼 may_Xia 的回复:] [quote=引用 13 楼 paschen 的回复:] 我上面发的你没全改啊  int createSearchTree(PBinSearchTree ptree)  改成：  int createSearchTree(PBinSearchTree* ptree)     编译成功，但运行崩溃……[/quote]  去掉*ptree=NULL;那句[/quote]   依旧................................我都不好意思问了......................................................................

user: user-1
content: 引用 14 楼 may_Xia 的回复:[quote=引用 13 楼 paschen 的回复:] 我上面发的你没全改啊  int createSearchTree(PBinSearchTree ptree)  改成：  int createSearchTree(PBinSearchTree* ptree)     编译成功，但运行崩溃……[/quote]  去掉*ptree=NULL;那句

user: user-0
content: 引用 13 楼 paschen 的回复:我上面发的你没全改啊  int createSearchTree(PBinSearchTree ptree)  改成：  int createSearchTree(PBinSearchTree* ptree)     编译成功，但运行崩溃……

user: user-1
content: 我上面发的你没全改啊  int createSearchTree(PBinSearchTree ptree)  改成：  int createSearchTree(PBinSearchTree* ptree)

user: user-0
content: 引用 11 楼 paschen 的回复:[quote=引用 8 楼 may_Xia 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 may_Xia 的回复:] [quote=引用 5 楼 paschen 的回复:] [quote=引用 4 楼 may_Xia 的回复:] [quote=引用 3 楼 paschen 的回复:] createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢[/quote]  1、不是说参数是指针类型就叫按指针传递  2、取决于你要修改的东西，如果你要修改的是指针变量，那你就要传入这个指针变量的地址   int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }   createSearchTree(&t); [/quote]      改成这样?int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }  int main() { 	int s; 	PBinSearchNode* p; 	PBinSearchTree *t; 	p=(PBinSearchNode*)malloc(sizeof(PBinSearchNode));     createSearchTree(t); 	printf("请输入要查找的元素,若该元素已存在得到1,无该元素得到0.\n"); 	scanf("%d",&s); 	search(*t,s,p); 	return 0; 	 }好晕啊...新手小白,多包涵...[/quote]  什么意思？  上面不是给你改了：  createSearchTree(t);  改成：  createSearchTree(&t);  应该传地址[/quote]    直接这样改有错啊??[/quote]  你再发下你瑞的代码，还有错误提示是什么[/quote]      #include<stdio.h> #include<stdlib.h>  typedef int KeyType; struct BinSearchNode; typedef struct BinSearchNode* PBinSearchNode; struct BinSearchNode { KeyType key; PBinSearchNode llink,rlink; }; typedef struct BinSearchNode* BinSearchTree; typedef BinSearchTree* PBinSearchTree;  int search(PBinSearchTree ptree,KeyType key,PBinSearchNode *position) { PBinSearchNode p,q; p=*ptree;q=p; while(p!=NULL) { p=q; if(p->key==key) {*position=p;return 1;} else if(p->key>key) p=p->llink; else p=p->rlink; } *position=q;return 0; }  int insert(PBinSearchTree ptree,KeyType key) { PBinSearchNode position,p; p=(PBinSearchNode)malloc(sizeof(struct BinSearchNode)); if(search(ptree,key,&position)==1) return 1; if(p==NULL) {printf("Error.\n");return 0;} p->key=key;p->llink=p->rlink=NULL; if(position==NULL) *ptree=p; else if(key<position->key) position->llink=p; else position->rlink=p; return 0; }  int createSearchTree(PBinSearchTree ptree) { int i; *ptree=NULL; printf("请输入以-1为结束标记的节点列.\n"); scanf("%d",&i); while(i!=0) { insert(ptree,i); scanf("%d",&i); }  return 1; }  int main() { int s; PBinSearchNode* p; p=(PBinSearchNode*)malloc(sizeof(PBinSearchNode)); PBinSearchTree t; createSearchTree(&t); printf("请输入要查找的元素,若该元素已存在得到1,无该元素得到0.\n"); scanf("%d",&s); search(t,s,p); return 1;  }    [Error] cannot convert 'BinSearchNode***' to 'PBinSearchTree {aka BinSearchNode**}' for argument '1' to 'int createSearchTree(PBinSearchTree)'  谢谢啊！

user: user-1
content: 引用 8 楼 may_Xia 的回复:[quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 may_Xia 的回复:] [quote=引用 5 楼 paschen 的回复:] [quote=引用 4 楼 may_Xia 的回复:] [quote=引用 3 楼 paschen 的回复:] createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢[/quote]  1、不是说参数是指针类型就叫按指针传递  2、取决于你要修改的东西，如果你要修改的是指针变量，那你就要传入这个指针变量的地址   int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }   createSearchTree(&t); [/quote]      改成这样?int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }  int main() { 	int s; 	PBinSearchNode* p; 	PBinSearchTree *t; 	p=(PBinSearchNode*)malloc(sizeof(PBinSearchNode));     createSearchTree(t); 	printf("请输入要查找的元素,若该元素已存在得到1,无该元素得到0.\n"); 	scanf("%d",&s); 	search(*t,s,p); 	return 0; 	 }好晕啊...新手小白,多包涵...[/quote]  什么意思？  上面不是给你改了：  createSearchTree(t);  改成：  createSearchTree(&t);  应该传地址[/quote]    直接这样改有错啊??[/quote]  你再发下你瑞的代码，还有错误提示是什么

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: http://m.blog.csdn.net/article/details?id=53512081

user: user-0
content: 引用 7 楼 paschen 的回复:[quote=引用 6 楼 may_Xia 的回复:] [quote=引用 5 楼 paschen 的回复:] [quote=引用 4 楼 may_Xia 的回复:] [quote=引用 3 楼 paschen 的回复:] createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢[/quote]  1、不是说参数是指针类型就叫按指针传递  2、取决于你要修改的东西，如果你要修改的是指针变量，那你就要传入这个指针变量的地址   int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }   createSearchTree(&t); [/quote]      改成这样?int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }  int main() { 	int s; 	PBinSearchNode* p; 	PBinSearchTree *t; 	p=(PBinSearchNode*)malloc(sizeof(PBinSearchNode));     createSearchTree(t); 	printf("请输入要查找的元素,若该元素已存在得到1,无该元素得到0.\n"); 	scanf("%d",&s); 	search(*t,s,p); 	return 0; 	 }好晕啊...新手小白,多包涵...[/quote]  什么意思？  上面不是给你改了：  createSearchTree(t);  改成：  createSearchTree(&t);  应该传地址[/quote]    直接这样改有错啊??

user: user-1
content: 引用 6 楼 may_Xia 的回复:[quote=引用 5 楼 paschen 的回复:] [quote=引用 4 楼 may_Xia 的回复:] [quote=引用 3 楼 paschen 的回复:] createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢[/quote]  1、不是说参数是指针类型就叫按指针传递  2、取决于你要修改的东西，如果你要修改的是指针变量，那你就要传入这个指针变量的地址   int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }   createSearchTree(&t); [/quote]      改成这样?int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }  int main() { 	int s; 	PBinSearchNode* p; 	PBinSearchTree *t; 	p=(PBinSearchNode*)malloc(sizeof(PBinSearchNode));     createSearchTree(t); 	printf("请输入要查找的元素,若该元素已存在得到1,无该元素得到0.\n"); 	scanf("%d",&s); 	search(*t,s,p); 	return 0; 	 }好晕啊...新手小白,多包涵...[/quote]  什么意思？  上面不是给你改了：  createSearchTree(t);  改成：  createSearchTree(&t);  应该传地址

user: user-0
content: 引用 5 楼 paschen 的回复:[quote=引用 4 楼 may_Xia 的回复:] [quote=引用 3 楼 paschen 的回复:] createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢[/quote]  1、不是说参数是指针类型就叫按指针传递  2、取决于你要修改的东西，如果你要修改的是指针变量，那你就要传入这个指针变量的地址   int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }   createSearchTree(&t); [/quote]      改成这样?int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }  int main() { 	int s; 	PBinSearchNode* p; 	PBinSearchTree *t; 	p=(PBinSearchNode*)malloc(sizeof(PBinSearchNode));     createSearchTree(t); 	printf("请输入要查找的元素,若该元素已存在得到1,无该元素得到0.\n"); 	scanf("%d",&s); 	search(*t,s,p); 	return 0; 	 }好晕啊...新手小白,多包涵...

user: user-1
content: 引用 4 楼 may_Xia 的回复:[quote=引用 3 楼 paschen 的回复:] createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢[/quote]  1、不是说参数是指针类型就叫按指针传递  2、取决于你要修改的东西，如果你要修改的是指针变量，那你就要传入这个指针变量的地址   int createSearchTree(PBinSearchTree* ptree) { 	int i; 	*ptree=NULL; 	printf("请输入以-1为结束标记的节点列.\n"); 	scanf("%d",&i); 	while(i!=0) 	{ 		insert(*ptree,i); 		scanf("%d",&i); 	}  	return 1; }   createSearchTree(&t);

user: user-0
content: 引用 3 楼 paschen 的回复:createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t   传的不是指针吗？想不通.... 那应该怎么传？？谢谢

user: user-1
content: createSearchTree(t); 是按值传递的，函数中的参数是复制过来的，你在函数中的修改不会影响到主函数中的t

user: user-4
content: p=*ptree //?? p=ptree