注册 登录
编程论坛 数据结构与算法

[求助]生成一棵二叉树问题

baby69yy2000 发布于 2007-08-22 19:18, 1002 次点击
大家帮我看看,程序那错了呢?编译通过了,可是,当我输入一个单词之后,回车,再输入单词,狂吃我内存呢?好郁闷呀!我用的VC++6.0
//生成一棵二叉树,比较单词出现的次数
//c++ java Fortran basic Foxbase
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXWORD 20
struct tnode{
char *word; //指向一个单词
int count; //访问次数
struct tnode *left; //左孩子
struct tnode *right; //右孩子
};
char *GetWord() //读取单词
{
char *p;
if((p=(char*)malloc(MAXWORD+1))==NULL) {printf("Out of memory!\n");return(NULL);}
scanf("%MAXWORDs",p);
if(strlen(p)==0) return(NULL);
return p;
}
struct tnode *tree(struct tnode *p,char *w) //生成树
{
struct tnode *talloc();
int cond;
if(p==NULL)
{
p=talloc();
p->word=w;
p->count=1;
p->left=p->right=NULL;
}
else if((cond=strcmp(w,p->word))==0)
p->count++;
else if(cond<0)
p->left=tree(p->left,w);
else
p->right=tree(p->right,w);
return(p);
}
void treeprint(struct tnode *point) //打印树
{
if(point!=NULL)
{
treeprint(point->left);
printf("%4d%s\n",point->count,point->word);
treeprint(point->right);
}
}
struct tnode *talloc()
{
return((struct tnode*)malloc(sizeof(struct tnode)));
}
int main()
{
struct tnode *root;
char *t=NULL;
root=NULL;
while((t=GetWord())!=NULL)
root=tree(root,t);
treeprint(root);
return 0;
}
4 回复
#2
aipb20072007-08-23 22:53
因为你是c语写的,我不太懂

帮你跟踪了下,出错是输入单词的函数,里面的输入应该不对,获取不了第2次输入,会直接跳过,导致无限循环。
#3
baby69yy20002007-08-24 01:42
斑竹是用vc++里面的Debug跟踪的吗?你们专业编程的经常用Debug调试程序吗?
我再该该,谢谢!
#4
aipb20072007-08-24 09:17
以下是引用baby69yy2000在2007-8-24 1:42:30的发言:
斑竹是用vc++里面的Debug跟踪的吗?你们专业编程的经常用Debug调试程序吗?
我再该该,谢谢!
是啊,调试问题最简单直接的方法就是用debug,vc的debug很强大。一般的问题可以用单步执行找到出错的环节,再去有针对的检查代码。当然还有更灵活的方法,那就要靠积累了。
#5
孀倪2012-08-21 18:24
na请问下Tc2.0 下debug怎么样
1