| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2746 人关注过本帖
标题:总是出现该内存不能为“written"??该如何调试呢?
只看楼主 加入收藏
huangch
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:62
专家分:0
注 册:2008-7-21
收藏
 问题点数:0 回复次数:15 
总是出现该内存不能为“written"??该如何调试呢?
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define NULL 0
#define MAX 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 0
#define OK 1

//----树的二叉树(孩子-兄弟)存储表示------
typedef struct CSNode
{  
    char data;
    struct CSNode *firstchild, *nextsibling;
}CSNode, *CSTree;
//----二叉树的二叉链表存储表示------------
typedef struct BiNode
{
    char Data;
    struct BiNode *lchild, *rchild;   //左右孩子指针
}BiNode, *BiTree;

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造树表表示的二叉树。
int CreateTree(BiNode** pTree)   /*Input Example: abd##e##cf##g##*/
{
    char ch;

    scanf("%c",&ch);

    if (ch == '#')
    {
        ( * pTree) = NULL;
    }
    else
    {
        if (!(( * pTree) = (BiNode * ) malloc (sizeof(BiNode))))
        {
            exit(OVERFLOW);
        }

        (*pTree)->Data = ch;
        CreateTree(&(( * pTree)->lchild));
        CreateTree(&(( * pTree)->rchild));
    }
    
    return 0;
}

//----二叉树转化为森林----------------
int bi_forest(BiNode *t, CSNode *p)
{
    if (!t->Data)
    {
        p->data = NULL;
    }
    else
    {
        p->data = t->Data;
        bi_forest(t->lchild, p->firstchild);    //递归遍历左子树,使其为长子
        bi_forest(t->rchild, p->nextsibling);   //递归遍历右子树,使其为兄弟
    }

    return OK;
}

//按凹入表形式打印输出树的元素,i表示结点所在层次,初次调用时i=0
void Print_CSTree(CSNode *T, int i)
{
    int j;
    CSNode *p = NULL;

    for (j = 1; j <= i; j++)
    {
        printf(" ");
    }                                   //留出i个空格以表现出层次
    
    printf("%c\n",T->data);             //打印元素,换行
    
    for (p = T->firstchild; p; p = p->nextsibling)
    {
        Print_CSTree(p, i + 1);
    }                                  //打印子树
}

BiNode *T = NULL;
CSNode *p = NULL;

int main()
{
    freopen("1.txt","r",stdin);
//    T = (CSTree *) malloc (sizeof(CSTree));
    CreateTree(&T);
    bi_forest(T, p);
    Print_CSTree(p, 0);
    
    return 0;
}
搜索更多相关主题的帖子: 内存 written 调试 
2008-11-27 21:14
huangch
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:62
专家分:0
注 册:2008-7-21
收藏
得分:0 
补充:运行程序时总是跳出:
”0x00401122“指令引用的"0x00000000"内存。改内存不能为:“written"。

菜鸟我向跟为请教le!谢谢!
2008-11-27 21:17
dillon
Rank: 1
等 级:新手上路
威 望:2
帖 子:183
专家分:0
注 册:2008-10-6
收藏
得分:0 
你试着在任务管理器中找到你程序运行的进程,关掉就行了。
2008-11-27 21:34
huangch
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:62
专家分:0
注 册:2008-7-21
收藏
得分:0 
回复 第3楼 dillon 的帖子
还是不行啊!
不够我想这种情况应该是我的程序出了问题,我的水平还不至于因为电脑硬件问题而导致程序不能如我所愿的!
看看我的程序啊!
出了那些问题??
2008-11-27 21:42
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
int bi_forest(BiNode *t, CSNode *p)//这个p在调用时传进来的是一个空指针,NULL
{
    if (!t->Data)
    {
        p->data = NULL;
    }
    else
    {
        p->data = t->Data;//空指针调用,自然非法,
        bi_forest(t->lchild, p->firstchild);
        bi_forest(t->rchild, p->nextsibling);
    }

    return OK;
}
这个函数不知道是什么功能,不过我认为不对,最好在想想.
2008-11-27 21:42
dillon
Rank: 1
等 级:新手上路
威 望:2
帖 子:183
专家分:0
注 册:2008-10-6
收藏
得分:0 
你程序中有不明错误,水平不够没找到。
2008-11-27 21:52
huangch
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:62
专家分:0
注 册:2008-7-21
收藏
得分:0 
回复 第5楼 debroa723 的帖子
版主可以再指点下吗?我还是不明白哩!
我可以解释这函数:
//--------二叉树转化为森林----------------
int bi_forest(BiNode *t, CSNode **p)
{
//森林的存储结构采用孩子-兄弟表示法
//将二叉树树转化为相应的森林
    if (!t)
    {
        (*p) = NULL;
    }                                               //如果二叉树是空的,则将相应的森林也设为空
    else
    {
        (*p)->data = t->Data;
        bi_forest(t->lchild, &(*p)->firstchild);    //递归遍历左子树,使其为长子
        bi_forest(t->rchild, &(*p)->nextsibling);   //递归遍历右子树,使其为兄弟
    }

    return 0;
}
2008-11-27 21:57
huangch
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:62
专家分:0
注 册:2008-7-21
收藏
得分:0 
回复 第6楼 dillon 的帖子
还是说声:谢谢!
2008-11-27 21:59
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
int main()
{
    freopen("1.txt","r",stdin);
//    T = (CSTree *) malloc (sizeof(CSTree));
    CreateTree(&T);
//程序到这里p始终没有变过,都是NULL,进入bi_forest,有p->data 操作,NULL指针出错。
    bi_forest(T, p);
    Print_CSTree(p, 0);
   
    return 0;
}
2008-11-27 22:08
huangch
Rank: 1
来 自:肇庆学院网络工程系
等 级:新手上路
帖 子:62
专家分:0
注 册:2008-7-21
收藏
得分:0 
回复 第9楼 woshiyun 的帖子
可是我增加一些内容也不行啊!
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define NULL 0
#define MAX 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 0
#define OK 1

//----树的二叉树(孩子-兄弟)存储表示------
typedef struct CSNode
{  
    char data;
    struct CSNode *firstchild, *nextsibling;
}CSNode, *CSTree;
//----二叉树的二叉链表存储表示------------
typedef struct BiNode
{
    char Data;
    struct BiNode *lchild, *rchild;   //左右孩子指针
}BiNode, *BiTree;

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造树表表示的二叉树。
int CreateTree(BiNode** pTree)   /*Input Example: abd##e##cf##g##*/
{
    char ch;

    scanf("%c",&ch);

    if (ch == '#')
    {
        ( * pTree) = NULL;
    }
    else
    {
        if (!(( * pTree) = (BiNode * ) malloc (sizeof(BiNode))))
        {
            exit(OVERFLOW);
        }

        (*pTree)->Data = ch;
        CreateTree(&(( * pTree)->lchild));
        CreateTree(&(( * pTree)->rchild));
    }
    
    return 0;
}

//--------二叉树转化为森林----------------
int bi_forest(BiNode *t, CSNode **p)
{
//森林的存储结构采用孩子-兄弟表示法
//将二叉树树转化为相应的森林
    if (!t)
    {
        (*p) = NULL;
    }                                               //如果二叉树是空的,则将相应的森林也设为空
    else
    {
        (*p)->data = t->Data;
        bi_forest(t->lchild, &(*p)->firstchild);    //递归遍历左子树,使其为长子
        bi_forest(t->rchild, &(*p)->nextsibling);   //递归遍历右子树,使其为兄弟
    }

    return 0;
}

//按凹入表形式打印输出树的元素,i表示结点所在层次,初次调用时i=0
void Print_CSTree(CSNode *T, int i)
{
    int j;
    CSNode *p = NULL;

    for (j = 1; j <= i; j++)
    {
        printf(" ");
    }                                   //留出i个空格以表现出层次
    
    printf("%c\n",T->data);             //打印元素,换行
    
    for (p = T->firstchild; p; p = p->nextsibling)
    {
        Print_CSTree(p, i + 1);
    }                                  //打印子树
}

int main()
{
    freopen("1.txt","r",stdin);
    
    BiNode *T;
    CSNode *p;

    p = (CSNode *) malloc (sizeof(CSNode));
    p->data = 'a';
    p->firstchild = NULL;
    p->nextsibling = NULL;
    
    T = (BiNode *) malloc (sizeof(BiNode));
    T->Data = 'a';
    T->lchild = NULL;
    T->rchild = NULL;

    CreateTree(&T);
    bi_forest(T, &p);
    Print_CSTree(p, 0);
    
    return 0;
}
2008-11-27 22:31
快速回复:总是出现该内存不能为“written"??该如何调试呢?
数据加载中...
 
   



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

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