| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 503 人关注过本帖
标题:明明指针不为空,也不能对其进行读取,为什么?
只看楼主 加入收藏
fxr2003
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-10
收藏
 问题点数:0 回复次数:1 
明明指针不为空,也不能对其进行读取,为什么?

我做一个统计中文词频的程序,包括程序文件1.c和待分析文件source.c(内容就是一些中文词),如下:
大家只需看看红色注释的地方,明明postition[0]->son->son和postition[0]->son->son->chi都不为空,但是运行时却在此处出现不能读的错误,苍天啊,大地啊.....


1.c
-----------------------------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include<string.h>
#include<conio.h>
FILE *in;
int ai,bi;
struct list{
struct key *poi;
int i;};
struct key{
int i;
char chi[20];
struct key *son;};
struct con{
int i;
char chi[20];
struct con *next;
struct key *son;
};
struct con *position[10]={NULL};
struct con root={0,"ssss",NULL,NULL};
void change();
int look(char *);
int looks(struct con *,char *);
main(){
ai=1;bi=0;
change();
}
void change(){
char str[2]={0},pre[20]={0};
int a,b=0,c=0;
struct con *p;
in=fopen("source.c","r");
while(!feof(in)){
fgets(str,2,in);
if(str[0]!=32&&str[0]!=58&&str[0]!=59&&str[0]!=13&&str[0]!=10){
pre[b]=str[0];pre[b+1]=str[1];b++;}
else{
if(c==0){
if(look(pre)==1){
p=(struct con *)malloc(sizeof(struct con));if(!p) printf("space");
p->next=root.next;root.next=p;p->i=ai;p->son=NULL;strcpy(p->chi,pre);position[bi]=p;bi++;ai++;}
for(b=0;b<20;b++) pre[b]=0; b=0;
if(str[0]==58) {c=1;continue;}
if(str[0]==59) c=0;
}
if(c==1){
for(a=0;a<10&&position[a]!=NULL;a++){
if(looks(position[a],pre)==1){
p=(struct key *)malloc(sizeof(struct key));//这儿也是由于p类型为con,但却赋值为key,我用的VC不报错,后来问题就出在别的地方.如果单独看注释出错的地方,很难想到这儿出错.我错了......
if(!p) printf("space");
p->son=position[a]->son;position[a]->son=p;p->i=1;
strcpy(p->chi,pre);ai++;printf("ho%s",position[0]->son->son->chi);
}
}
if(position[0]->son->son->chi!=NULL) {printf("ha");printf("%s",position[0]->son->son->chi);}//请看这一句,明明指针不为空,怎么不能读取
if(str[0]==59) {c=0;for(a=0;a<10;a++) position[a]=NULL;bi=0;}
for(b=0;b<20;b++) pre[b]=0;b=0;
}
}
}

}
int look(char *c){
struct con *pp;
int i=1;
char te[20]={0};
pp=&root;
while(pp->next!=NULL){
pp=pp->next;
if(!strcmp(pp->chi,c)) {i=0;position[bi]=pp;bi++;break;}
else i=1;}
if(!strcmp(te,c)) i=0;
if(i==1) return 1;
if(i==0) return 0;
}
int looks(struct con *e,char *ca){
struct con *pp;
char te[20]={0};
pp=e;
if(!strcmp(te,ca)) return 0;
while(pp->son!=NULL){
pp=pp->son;//这儿pp是con类型,而pp->son为key
if(!strcmp(ca,pp->chi)) return 0;
}
return 1;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------



source.c中的文本:

信息检索:索引 分词 ;
信息组织 组织:元数据 索引 ;
信息检索 : 索引 分词 ;

MRHHCqCv.rar (1.27 KB) 明明指针不为空,也不能对其进行读取,为什么?


[此贴子已经被作者于2006-5-13 16:02:42编辑过]

搜索更多相关主题的帖子: 指针 
2006-05-13 13:04
fxr2003
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-10
收藏
得分:0 

两个地方指针类型异常赋值.
已用绿色标出.....
在哪跌倒,在哪起来....

[此贴子已经被作者于2006-5-13 16:03:33编辑过]

2006-05-13 15:58
快速回复:明明指针不为空,也不能对其进行读取,为什么?
数据加载中...
 
   



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

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