#include <stdlib.h>
#include <malloc.h>
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode * lchild,*rchild;
} BiTNode, *BiTree;
int PreCreateBiTree(BiTree T,FILE * fp);
int PreOrderTraverse(BiTree T);
int InOrderTraverse(BiTree T);
int PostOrderTraverse(BiTree T);
int LevelOrderTraverse(BiTree T);
int main(int argc, char** argv){
FILE *fp=fopen("file","r");
BiTree T;
PreCreateBiTree(T,fp);
PreOrderTraverse(T);
InOrderTraverse(T);
return 0;
}
int PreCreateBiTree(BiTree T, FILE* fp){
ElemType ch=(ElemType)fgetc(fp);
if(ch==' ') T=NULL;
else {
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
T->lchild=NULL;
T->rchild=NULL;
PreCreateBiTree(T->lchild,fp);
PreCreateBiTree(T->rchild,fp);
}
return 1;
}
int PreOrderTraverse(BiTree T){
if(T){
printf("%c ",T->data);
if(T->rchild) PreOrderTraverse(T->rchild);
if(T->lchild) PreOrderTraverse(T->lchild);
return 1;
}
else return 0;
}
int InOrderTraverse(BiTree T){
if(T){
if(T->lchild) InOrderTraverse(T->lchild);
printf("%c ",T->data);
if(T->rchild) InOrderTraverse(T->rchild);
return 1;
}
else return 0;
}
int PostOrderTraverse(BiTree T){
if(T){
if(T->lchild) PostOrderTraverse(T->lchild);
if(T->rchild) PostOrderTraverse(T->rchild);
printf("%c ",T->data);
return 1;
}
else return 0;
}
------------------------------------------------------------------
gdb调试后如此显示
Program received signal SIGSEGV, Segmentation fault.
_int_malloc (av=0x7ffff7dd71c0, bytes=24) at malloc.c:4411
4411 malloc.c: 没有那个文件或目录.
in malloc.c
(gdb)
5 个解决方案
#1
#include <stdio.h>
#include <stdlib.h>
只需这两个头文件就行了啊
#include <stdlib.h>
只需这两个头文件就行了啊
#2
去了malloc.h 也是显示这个结果
#3
vc2010显示如下
1>f:\c_projects\n1\mp_solution\mytestp\ex5.c(19): warning C4700: uninitialized local variable 'T' used
我个人认为:
T在使用前未初始化,这个不是语法错误,但是你只定义了一个指针变量T,却没有指向一个地址,你让TA情何以堪,所以,使用前先为T开辟个内存空间吧!
在为T开辟空间前,你就在使用T了:PreCreateBiTree(T,fp); //T作为实参被使用
如果我想你采用这种形式应该没问题:T=PreCreateBiTree(fp); //是否有为T指定空间之意?
1>f:\c_projects\n1\mp_solution\mytestp\ex5.c(19): warning C4700: uninitialized local variable 'T' used
我个人认为:
T在使用前未初始化,这个不是语法错误,但是你只定义了一个指针变量T,却没有指向一个地址,你让TA情何以堪,所以,使用前先为T开辟个内存空间吧!
在为T开辟空间前,你就在使用T了:PreCreateBiTree(T,fp); //T作为实参被使用
如果我想你采用这种形式应该没问题:T=PreCreateBiTree(fp); //是否有为T指定空间之意?
#4
linux gcc 是吧?
gcc编译的时候加上 -g
gdb到程序崩了之后,输入bt命令,然后就会有神奇的事情发生了。
gcc编译的时候加上 -g
gdb到程序崩了之后,输入bt命令,然后就会有神奇的事情发生了。
#5
段错误可能就是分配内存引起的,GDB调试下
#1
#include <stdio.h>
#include <stdlib.h>
只需这两个头文件就行了啊
#include <stdlib.h>
只需这两个头文件就行了啊
#2
去了malloc.h 也是显示这个结果
#3
vc2010显示如下
1>f:\c_projects\n1\mp_solution\mytestp\ex5.c(19): warning C4700: uninitialized local variable 'T' used
我个人认为:
T在使用前未初始化,这个不是语法错误,但是你只定义了一个指针变量T,却没有指向一个地址,你让TA情何以堪,所以,使用前先为T开辟个内存空间吧!
在为T开辟空间前,你就在使用T了:PreCreateBiTree(T,fp); //T作为实参被使用
如果我想你采用这种形式应该没问题:T=PreCreateBiTree(fp); //是否有为T指定空间之意?
1>f:\c_projects\n1\mp_solution\mytestp\ex5.c(19): warning C4700: uninitialized local variable 'T' used
我个人认为:
T在使用前未初始化,这个不是语法错误,但是你只定义了一个指针变量T,却没有指向一个地址,你让TA情何以堪,所以,使用前先为T开辟个内存空间吧!
在为T开辟空间前,你就在使用T了:PreCreateBiTree(T,fp); //T作为实参被使用
如果我想你采用这种形式应该没问题:T=PreCreateBiTree(fp); //是否有为T指定空间之意?
#4
linux gcc 是吧?
gcc编译的时候加上 -g
gdb到程序崩了之后,输入bt命令,然后就会有神奇的事情发生了。
gcc编译的时候加上 -g
gdb到程序崩了之后,输入bt命令,然后就会有神奇的事情发生了。
#5
段错误可能就是分配内存引起的,GDB调试下