user-0 提问: 如果一个指针函数没有定义返回值，那么在调用完毕后会返回什么？

回复:
user: user-0
content: 引用 4 楼 max_min_ 的回复:显然程序错了啊！create函数接口没有返回，也就是malloc的地址没有返回！ 在接口里堆内存不返回如何使用如何调用释放? 代码有问题！在哪里复制过来的啊？ 真的吗？为什么视频作者在程序中下段，添加监视又可以把二叉树里面的数据都显示出来..视频是郁金香视频，不是很有名

user: user-1
content: 显然程序错了啊！create函数接口没有返回，也就是malloc的地址没有返回！ 在接口里堆内存不返回如何使用如何调用释放? 代码有问题！在哪里复制过来的啊？

user: user-2
content: 恩，程序有错：  CreateNode(v);  函数体少了个return语句。  返回值一般都是通过通用寄存器eax返回，也就是在退出函数时候，要返回的值会存储到eax中去，然后再赋值给主调函数中的变量。如果不使用，就简单的抛弃。  注意：最多只能返回一个值，因此一个寄存器就够了！如果想多个返回，可以使用传参数引用或者指针方式，或者返回多个值合成的结构体

user: user-3
content: 这个问题问得好，以前还真没想过这个问题

user: user-4
content: 引用 3 楼 a1385341 的回复:[quote=引用 2 楼 caozhy 的回复:] 什么“视频”误人子弟？敢不敢让作者曝光下。 其实代码是这样的： #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <stdarg.h>  #include <time.h> struct node   //定义一个node结构体 { 	long  data; //存放数据的一个或者多个项  	long count; 	struct node *pLeft;  //左孩子 指向一个二叉树 	struct node *pRight; //右孩子  指向一个二叉树 };  struct node * CreateNode(long value)   //创建根结点的函数 { 	struct node *p=malloc(sizeof(struct node));   //为p分配内存空间 	p->pLeft=p->pRight=NULL;   //将左右孩子都置空 	p->data=value;             //data赋值为传进来的value的值 	p->count=1; } struct node * AddNode(struct node * pNode,long v)   //创建“孩子”的函数 { 	//情况一 pNode==NULL 	if (pNode==NULL) 	{ 		return CreateNode(v); 	} 	// pNode->data=v 	if (pNode->data==v) 	{ 		pNode->count++; 		return pNode; 	} 	//v大于结点数据 	if (v>pNode->data) 	{ 		if (pNode->pRight==NULL) 		{ 			pNode->pRight=CreateNode(v); 			return pNode->pRight; 		}else return AddNode(pNode->pRight,v); //递归调用 	} 	//v小于 结点数据 	if (v<pNode->data) 	{ 		if (pNode->pLeft==NULL) 		{ 			pNode->pLeft=CreateNode(v); 			return pNode->pLeft; 		}else return AddNode(pNode->pLeft,v); //递归调用 	}  	return NULL; } int main(void) {	 	struct node*root; 	long v,i; 	printf("请输入二叉树根结点数值："); 	scanf("%d",&v); 	root=CreateNode(v);   //创建根结点 	for (i=0;i<=10;i++)   	{ 		AddNode(root,i);   //加入10个孩子  	}  	getchar(); 	return 0; } 在倒数第8行的位置不懂，root=CreateNode(v);   //创建根结点 ，不知道是我表达错了，还是程序错了..[/quote]  程序肯定错误了，用VC编译的话会认为没有返回值，错误。使用gcc编译倒是没有问题， 程序可能运行还是能显示值啥的，因为，虽然没有返回值，实际在createnode(v)后，还是有一个值赋给root，但这个值完全是不可知的，可能正确，可能不正确。而视频中的root值可能指向一个可以读写的内存，所以运行看上去似乎是正确的。

user: user-0
content: 引用 2 楼 caozhy 的回复:什么“视频”误人子弟？敢不敢让作者曝光下。 其实代码是这样的： #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <stdarg.h>  #include <time.h> struct node   //定义一个node结构体 { 	long  data; //存放数据的一个或者多个项  	long count; 	struct node *pLeft;  //左孩子 指向一个二叉树 	struct node *pRight; //右孩子  指向一个二叉树 };  struct node * CreateNode(long value)   //创建根结点的函数 { 	struct node *p=malloc(sizeof(struct node));   //为p分配内存空间 	p->pLeft=p->pRight=NULL;   //将左右孩子都置空 	p->data=value;             //data赋值为传进来的value的值 	p->count=1; } struct node * AddNode(struct node * pNode,long v)   //创建“孩子”的函数 { 	//情况一 pNode==NULL 	if (pNode==NULL) 	{ 		return CreateNode(v); 	} 	// pNode->data=v 	if (pNode->data==v) 	{ 		pNode->count++; 		return pNode; 	} 	//v大于结点数据 	if (v>pNode->data) 	{ 		if (pNode->pRight==NULL) 		{ 			pNode->pRight=CreateNode(v); 			return pNode->pRight; 		}else return AddNode(pNode->pRight,v); //递归调用 	} 	//v小于 结点数据 	if (v<pNode->data) 	{ 		if (pNode->pLeft==NULL) 		{ 			pNode->pLeft=CreateNode(v); 			return pNode->pLeft; 		}else return AddNode(pNode->pLeft,v); //递归调用 	}  	return NULL; } int main(void) {	 	struct node*root; 	long v,i; 	printf("请输入二叉树根结点数值："); 	scanf("%d",&v); 	root=CreateNode(v);   //创建根结点 	for (i=0;i<=10;i++)   	{ 		AddNode(root,i);   //加入10个孩子  	}  	getchar(); 	return 0; } 在倒数第8行的位置不懂，root=CreateNode(v);   //创建根结点 ，不知道是我表达错了，还是程序错了..

user: user-5
content: 什么“视频”误人子弟？敢不敢让作者曝光下。

user: user-6
content: 返回值一般保存在eax寄存器中，所以如果没赋值返回值，也就是没对eax赋值，那么你读取eax即返回的值是不确定的。