| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 402 人关注过本帖
标题:求助:一个莫名其妙的的 bug !
只看楼主 加入收藏
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
结帖率:46.15%
收藏
 问题点数:0 回复次数:2 
求助:一个莫名其妙的的 bug !
问题描述:写了一个二叉树的测试代码,顺序执行是没问题的,可是想要中序遍历输出多次时,运行出错了,请问是什么原因呢?
//    for (i=0; i<3; i++) //一旦执行这条语句运行就出错!何故?
    {
        printf("\n中序:");
           InOrderPrint(bt); //中序遍历输出结点(递归)
    }

代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef char ElemType;
typedef int Status; //函数类型,其值是函数结果状态代码,如OK等

typedef struct BiTreeNode{
    ElemType data;
    struct BiTreeNode *lchild, *rchild;//左,右孩子指针
} BiTreeNode, *BiTree;

void InOrderPrint(BiTree p); //中序遍历输出结点(递归)
void CreateBiTree(BiTree *bt);//生成一棵二叉排序树(输入单个字符,以#结束)
BiTree NewBiTree(ElemType x);//构造一个数据域为x的新结点
void Insert(BiTree *b, BiTree s);//在二叉排序树中插入新结点s

int main(void)
{
    BiTree bt;
    int i;
   
    CreateBiTree(&bt);//生成一棵二叉排序树(输入单个字符,以#结束)
//    for (i=0; i<3; i++) //一旦执行这条语句运行就出错!何故?
    {
        printf("\n中序:");
           InOrderPrint(bt); //中序遍历输出结点(递归)
    }
   
    system("PAUSE");
    return 0;
}

void CreateBiTree(BiTree *bt)//生成一棵二叉排序树(输入单个字符,以#结束)
{
    BiTree s;
    ElemType x;
      
    scanf("%c", &x);
    while (x != '#')
    {
        s = NewBiTree(x);//构造一个数据域为x的新结点
        Insert(bt, s);//在二叉排序树中插入新结点s
        scanf("%c", &x);
    }
}

BiTree NewBiTree(ElemType x)//构造一个数据域为x的新结点
{
    BiTree s = (BiTree)malloc(sizeof(BiTreeNode));
   
    if (!s)
    {
        printf("Out of space!");
        exit (1);
    }
    s->data = x;
    s->lchild = s->rchild = NULL;
   
    return s;
}

void Insert(BiTree *b, BiTree s)//在二叉排序树中插入新结点s
{
    if (*b == NULL)
        *b = s;
    else if ((*b)->data == s->data)//不做任何插入操作
        return;
    else if((*b)->data > s->data)//把s所指结点插入到左子树中
        Insert(&(*b)->lchild, s);
    else               //把s所指结点插入到右子树中
        Insert(&(*b)->rchild, s);
}

void InOrderPrint(BiTree p) //中序遍历输出结点(递归)
{
    if (p != NULL)
    {
        InOrderPrint(p->lchild); //遍历左子树
        printf("%c ", p->data);//输出该结点
        InOrderPrint(p->rchild); //遍历右子树
    }
}
搜索更多相关主题的帖子: 二叉树 include 
2014-10-02 11:54
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
错误信息如下:
“0x004017e2”指令引用的“0x00000300”内存。该内存不能为“read”。
要终止程序,请单击“确定”
要调试程序,请单击“取消”
2014-10-02 12:00
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
已经找到原因了——野指针。
int main(void)
{
    BiTree bt; //此处应改为BiTree bt = NULL;
    int i;
2014-10-04 11:33
快速回复:求助:一个莫名其妙的的 bug !
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055625 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved