0xC0000005: 读取位置 0x00000000 时发生访问冲突

waynezi 2010-12-06 08:43:32
void OutResult(ResultType rslist,int n)
{ int i,j;
Link p;
for(i=0;i<n;i++){
printf("The word ");
PrintWord(rslist[i].data);
printf(" appeared in the file %d times",rslist[i].count);
if(rslist[i].count!=0){
printf(" and on ");
p=rslist[i].next;
for(j=0;j<rslist[i].count;j++)
{
if(j<rslist[i].count-1)
{
printf("%dth line ",p->elem);
p=p->next;
}
else printf("%dth line ",p->elem);
}
}

这是怎么回事呢?请求各位大神帮助下、、
...全文
499 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
waynezi 2010-12-10
  • 打赏
  • 举报
回复
else printf("%dth line ",p->elem);
我把这个删了,就没问题了~
waynezi 2010-12-08
  • 打赏
  • 举报
回复
谢谢!我在你说的那两个地方都做了改正,可是问题还没有解决,是不是还有其他问题呢?[Quote=引用 11 楼 cranium 的回复:]
测试你的代码之后,发现2处问题,如下:

一、ResultType是一个含16个元素的数组类型,不是很明白FreeResult第二参数的作用是什么,但是其内用第二参数作循环,n大于16时,数组访问明显越界。

C/C++ code

/*--------------------------------------------*/
/* 撤销统计结果数据空间函数 */
/* 功能:释……
[/Quote]
waynezi 2010-12-08
  • 打赏
  • 举报
回复
谢谢!我在你说的那两个地方都做了改正,可是问题还没有解决,是不是还有其他问题呢?[Quote=引用 10 楼 waynezi 的回复:]
你复制一份跟我完了有什么关系么?

引用 8 楼 waynezi 的回复:
status match(FILE *f,OrderList pat,ResultType rs)
{ int i,k,linenum,failed,fsp;
OrderList sa;
EqelemList eqlist;
Link q;
linenum=1;
while(!feof(f))
{
i……
[/Quote]
漫步者、 2010-12-08
  • 打赏
  • 举报
回复

void OutResult(ResultType rslist,int n)//ResultType rslist,申明的对象!
{ int i,j;
Link p; //?? Link是个指针对象吧?
for(i=0;i<n;i++){
printf("The word ");
PrintWord(rslist[i].data); // rslist[i]数组对象了?
printf(" appeared in the file %d times",rslist[i].count);
if(rslist[i].count!=0){
printf(" and on ");
p=rslist[i].next; //??
for(j=0;j<rslist[i].count;j++)
{
if(j<rslist[i].count-1)
{
printf("%dth line ",p->elem);
p=p->next; //??
}
else printf("%dth line ",p->elem);
}
}

shiweifu 2010-12-08
  • 打赏
  • 举报
回复
越界了。。
cranium 2010-12-08
  • 打赏
  • 举报
回复
回楼上:你的问题不是访问冲突么?

我对你的代码只更改了那2个地方,之后运行无此错误出现! 不知为何你同样更改后还是出现该问题?
走好每一步 2010-12-07
  • 打赏
  • 举报
回复
完整代码。不然没时间帮你看
Huntrees 2010-12-07
  • 打赏
  • 举报
回复
这个越界错误,设断点,单步调试
elated 2010-12-07
  • 打赏
  • 举报
回复
地址空间0x00000000到0x0000FFFF是给空指针赋值的。
估计你是访问没有赋值的指针了
hbprotoss 2010-12-07
  • 打赏
  • 举报
回复
单步调试
或者在你认为有错的代码附近下断点调试
cranium 2010-12-07
  • 打赏
  • 举报
回复
测试你的代码之后,发现2处问题,如下:

一、ResultType是一个含16个元素的数组类型,不是很明白FreeResult第二参数的作用是什么,但是其内用第二参数作循环,n大于16时,数组访问明显越界。

/*--------------------------------------------*/
/* 撤销统计结果数据空间函数 */
/* 功能:释放存放统计结果数据的动态存储空间 */
/* 参数:ResultType rs--统计结果数组 */
/* 返回值:无 */
/*--------------------------------------------*/
void FreeResult(ResultType rs,int n)
{
int i;
Link p,q;

//n>16时,数组访问越界,我把它上限设成了16,可能不合你的功能
for(i=0;i<16/*n*/;i++){
p=rs[i].next;
while(p){
q=p;
p=p->next;
free(q);
}
rs[i].next=NULL;
rs[i].count=0;
}
}


二、DestroyList函数本身并无什么大问题,而且链表释放操作也正确,只是OrderList初始化时其指针成员并未初始化,作为存放在栈上的对象debug下被设置为0xcccccccc,所以OrderList 大小为0时,其head为0xcccccccc不等于0,进入循环,产生拒绝访问错误。

/*--------------------------------------------*/
/* 撤销有序表函数 */
/* 功能:释放有序表所有结点,撤销有序表 */
/* 参数:OrderList *L--有序表指针 */
/* 返回值:无 */
/*--------------------------------------------*/
void DestroyList(OrderList *L)
{
LinkType p,q;
//简单的添加了一个检查,因为我发现你的LinkType所指对象在初始化时都正确的设置了所有字段
//即如果存在一个对象,那么便不会出现访问0xcccccccc的情况。
if(L->size==0)
return;
p=L->head;
while(p){
q=p;p=p->next;
free(q);
}
L->head=L->tail=NULL;
}
waynezi 2010-12-07
  • 打赏
  • 举报
回复
你复制一份跟我完了有什么关系么?[Quote=引用 8 楼 waynezi 的回复:]
status match(FILE *f,OrderList pat,ResultType rs)
{ int i,k,linenum,failed,fsp;
OrderList sa;
EqelemList eqlist;
Link q;
linenum=1;
while(!feof(f))
{
if(InitList(&sa)==0)
……
[/Quote]
yihandrensunyong 2010-12-07
  • 打赏
  • 举报
回复
楼主你完了 这个我复制一份 哈哈
waynezi 2010-12-07
  • 打赏
  • 举报
回复
status match(FILE *f,OrderList pat,ResultType rs)
{ int i,k,linenum,failed,fsp;
OrderList sa;
EqelemList eqlist;
Link q;
linenum=1;
while(!feof(f))
{
if(InitList(&sa)==0)
{
printf("InitList(sa) errors!\n");
return (0);
}//if
eqlist.last=0;
if(!ExtractWord(f,&sa))
{
printf("ExtractWord errors!\n");
return 0;
}//if
ListCompare(pat,sa,&eqlist);
DestroyList(&sa);
if(eqlist.last!=0)
{
for(i=0;i<eqlist.last;i++)
{
failed=1;
fsp=eqlist.eqelem[i];
rs[fsp].count++;
for(k=0;k<i;k++)
if(eqlist.eqelem[i]==eqlist.eqelem[k])
{failed=0;break;}
if(failed==1)
{
q=(Link)malloc(sizeof(Node));
q->elem=linenum;
q->next=rs[fsp].next;
rs[fsp].next=q;
}//if语句
}//for语句
}//if语句
linenum++;
}//while语句
return (1);
}
/*--------------------------------------------*/
/* 初始化文件函数 */
/* 功能:输入指定的文件名并打开文件 */
/* 参数:FILE **f--返回的文件指针 */
/* 返回值:0--初始化失败;1--初始化成功 */
/*--------------------------------------------*/
status Initialization(FILE **fr)
{ char FileName[30];
printf("Input file name:");
do{ scanf("%s",FileName);
}while(strlen(FileName)==0);
*fr=fopen(FileName,"r");
if(*fr)
{ printf("file open!\n");
return(TRUE);
}
else { printf("file not open!\n");
return(FALSE);
}
}
/*--------------------------------------------*/
/* 输入统计的词集函数 */
/* 功能:输入待统计的词集并建立起数据结构 */
/* 参数:OrderList *pt--返回的词集有序表指针 */
/* 返回值:无 */
/*--------------------------------------------*/
void InputWord(OrderList *pt)
{ char cc;
int t=0;
Sequence ws;
LinkType p,q;
WordType nwd;
if(!InitList(pt))
{
printf("InitList fails!\n");
return;
}
printf("Input the string of words:\n");

while(t==0)
{
do{
cc=getchar();
}while(cc==' '||cc=='\n');
ws.size=0;
while(cc!=' ')
{
if(cc=='\n')
{t=1;break;}
ws.ch[ws.size]=cc;
ws.size++;
cc=getchar();
}//while
if(ws.size!=0)
{
if(NewWord(&nwd,ws))
{
if(MakeNode(&p,nwd))
{
LocateElem(*pt,nwd,&q);
InsertAfter(pt,q,p);
}//if
}//if
}//if
}//while
}
/*--------------------------------------------*/
/* 初始化统计结果表函数 */
/* 功能:用待统计词集初始化统计结果表 */
/* 参数:ResultType rs--统计结果数组 */
/* OrderList pt--待统计的词集表 */
/* 返回值:无 */
/*--------------------------------------------*/
void InitRList(ResultType rs,OrderList pat)
{ int k;
LinkType p;
p=pat.head->next;
for(k=0;k<pat.size;k++){
CopyWord(&rs[k].data,p->data);
rs[k].next=NULL;
rs[k].count=0;
p=p->next;
}
}
/*--------------------------------------------*/
/* 输出统计结果函数 */
/* 功能:输出统计的结果 */
/* 参数:ResultType rs--统计结果数组 */
/* int n--待统计的词集个数 */
/* 返回值:无 */
/*--------------------------------------------*/
void OutResult(ResultType rslist,int n)
{ int i,j;
Link p;
for(i=0;i<n;i++){
printf("The word ");
PrintWord(rslist[i].data);
printf(" appeared in the file %d times",rslist[i].count);
if(rslist[i].count!=0){
printf(" and on ");
p=rslist[i].next;
for(j=0;j<rslist[i].count;j++)
{
if(j<rslist[i].count-1)
{
printf("%dth line ",p->elem);
p=p->next;
}
else printf("%dth line ",p->elem);
}
}
}
}
/*--------------------------------------------*/
/* 撤销统计结果数据空间函数 */
/* 功能:释放存放统计结果数据的动态存储空间 */
/* 参数:ResultType rs--统计结果数组 */
/* 返回值:无 */
/*--------------------------------------------*/
void FreeResult(ResultType rs,int n)
{ int i;
Link p,q;
for(i=0;i<n;i++){
p=rs[i].next;
while(p){
q=p;
p=p->next;
free(q);
}
rs[i].next=NULL;
rs[i].count=0;
}
}
/*--------------------------------------------*/
/* 菜单选择函数 */
/* 功能:选择要操作内容 */
/* 参数:无 */
/* 返回值:1,2,3,4,5 */
/*--------------------------------------------*/
int nemu()
{
int mun;
printf("\n ********* Literary research aid *********\n");
printf(" *%8c1---Input matched words%9c\n",' ','*');
printf(" *%8c2---Input match file%13c\n",' ','*');
printf(" *%8c3---Proces file%17c\n",' ','*');
printf(" *%8c4---Output Result%15c\n",' ','*');
printf(" *%8c5---Quit%24c\n",' ','*');
printf(" *****************************************\n");
printf("%15cSelcet 1,2,3,4,5: ",' ');
do{
mun=getch()-48;
}while(mun<0 || mun>5);
printf("\n");
return(mun);
}
/*--------------------------------------------*/
/* 主函数 */
/*--------------------------------------------*/
void main()
{ int i,flag1=0,flag2=0,flag3=0;
FILE *fp;
LinkType pp;
OrderList pt;
ResultType rs;
sp.freep=0;
pt.size=0;
for(i=0;i<MAXNUM;i++) rs[i].next=NULL;
while(1)
{ switch(nemu())
{
case 1: //输入待统计的单词集
if(pt.size!=0) DestroyList(&pt);
InputWord(&pt);
pp=pt.head->next;
while(pp)
{
for(i=pp->data.stadr;i<(pp->data.stadr+pp->data.len);i++)
putchar(sp.stores[i]);
printf("\n");
pp=pp->next;
}
if(!ListEmpty(pt)) flag2=1;
break;
case 2: //初始化文件
if(Initialization(&fp)) flag1=1;
break;
case 3: //统计分析
if(flag1==0||flag2==0)
{ printf("file not processed!\n");
getchar();
break;
}
FreeResult(rs,pt.size);
InitRList(rs,pt);
if(!match(fp,pt,rs))
{ printf("memory overfllow!\n");
getchar();
break;
}
else flag3=1;
break;
case 4: //输出统计结果
if(flag3==0){
printf("not result!\n");
getchar();
break;
}
OutResult(rs,pt.size);
break;
case 5: //退出系统
FreeResult(rs,pt.size);
DestroyList(&pt);
return;
}
}
}
waynezi 2010-12-07
  • 打赏
  • 举报
回复
/*--------------------------------------------*/
/* 复制单词信息函数 */
/* 功能:把一个单词信息复制到另一个变量中 */
/* 参数:WordType *nw--新单词描述信息指针 */
/* WordType oldw--旧单词描述信息指针 */
/* 返回值:无 */
/*--------------------------------------------*/
void CopyWord(WordType *nw,WordType oldw)
{ nw->stadr=oldw.stadr;
nw->len=oldw.len;
}
/*--------------------------------------------*/
/* 单词比较函数 */
/* 功能:比较堆中两单词的大小 */
/* 参数:WordType wd1--第一个单词描述信息 */
/* WordType wd2--第二个单词描述信息 */
/* 返回值:-1--小于;0--等于;1--大于 */
/*--------------------------------------------*/
int WordCmp(WordType wd1,WordType wd2)
{ int si,sj;
for(si=wd1.stadr,sj=wd2.stadr;si<(wd1.stadr+wd1.len)&&sj<(wd2.stadr+wd2.len);si++,sj++)
{

if(sp.stores[si]>sp.stores[sj])
return (1);
else if(sp.stores[si]<sp.stores[sj])
return (-1);
}
if(wd1.len>wd2.len)/*两个单词长度不相等*/
return (1);
else if(wd1.len<wd2.len)
return (-1);
else
return (0);
}
/*--------------------------------------------*/
/* 打印单词函数 */
/* 功能:打印堆中一个单词 */
/* 参数:WordType wd--单词描述信息 */
/* 返回值:无 */
/*--------------------------------------------*/
void PrintWord(WordType wd)
{ int i;
for(i=0;i<wd.len;i++)
putchar(sp.stores[wd.stadr+i]);
}
/*---------------与有序表相关的函数-----------*/
/*--------------------------------------------*/
/* 结点生成函数 */
/* 功能:生成一个单词在堆中存储信息的结点 */
/* 参数:LinkType *p--生成的新结点指针 */
/* ElemType e--单词存储信息 */
/* 返回值:TRUE--成功;FALSE--失败 */
/*--------------------------------------------*/
status MakeNode(LinkType *p,ElemType e)
{ *p=(LinkType)malloc(sizeof(NodeType));
if(!(*p)) return(FALSE);
(*p)->data.stadr=e.stadr;
(*p)->data.len=e.len;
(*p)->next=NULL;
return(TRUE);
}
/*--------------------------------------------*/
/* 有序表初始化函数 */
/* 功能:申请头结点,初始化有序表 */
/* 参数:OrderList *L--有序表指针 */
/* 返回值:TRUE--初始化成功;FALSE--初始化失败*/
/*--------------------------------------------*/
status InitList(OrderList *L)
{ ElemType wd;
wd.stadr=-1;
wd.len=0;
if(MakeNode(&(L->head),wd))
{ L->tail=L->head;
L->head->next=NULL;
L->size=0;
return(TRUE);
}
else{ L->head=NULL;
return(FALSE);
}
}
/*--------------------------------------------*/
/* 撤销有序表函数 */
/* 功能:释放有序表所有结点,撤销有序表 */
/* 参数:OrderList *L--有序表指针 */
/* 返回值:无 */
/*--------------------------------------------*/
void DestroyList(OrderList *L)
{ LinkType p,q;
p=L->head;
while(p){
q=p;p=p->next;
free(q);
}
L->head=L->tail=NULL;
}
/*--------------------------------------------*/
/* 有序表查找函数 */
/* 功能:确定给定单词e在有序表中的位置 */
/* 参数:OrderList L--有序表 */
/* ElemType e--给定要查找的数据e */
/* LinkType *q--有序表结点指针 */
/* 查找成功,q指向具有e值的结点 */
/* 查找失败,q指向小于e的结点 */
/* 返回值:int型,1--查找成功;0--查找失败 */
/*--------------------------------------------*/
status LocateElem(OrderList L,ElemType e,LinkType *q)
{ LinkType pre,p;
int t;
pre=L.head;
p=L.head->next;
while(p)
{
t=WordCmp(p->data,e);
if(t==0)
{
*q=p;
return (1);
}
else if(t==-1)
{
pre=p;
p=p->next;
}
else
{
*q=pre;
return (0);
}
}
*q=pre;
return (0);
}
/*--------------------------------------------*/
/* 有序表插入函数 */
/* 功能:在指定结点q后插入一个结点s */
/* 参数:OrderList *L--有序表指针 */
/* LinkType q--指定结点指针 */
/* LinkType s--待查入结点指针 */
/* 返回值:无 */
/*--------------------------------------------*/
void InsertAfter(OrderList *L,LinkType q,LinkType s)
{ if(L->head&&q&&s){
s->next=q->next;q->next=s;
if(L->tail==q) L->tail=s;
L->size++;
}
}
/*------------------------------------------------*/
/* 表匹配函数 */
/* 功能:把Lb表中匹配La表成功的元素放入s表 */
/* 参数:OrderList La--存放统计单词的有序表 */
/* OrderList Lb--存放待匹配单词的有序表 */
/* EqelemList *s--存放匹配成功单词信息表指针*/
/* 返回值:无 */
/*------------------------------------------------*/
void ListCompare(OrderList La,OrderList Lb,EqelemList *s)
{ int pos;
LinkType pa,pb;
if(La.head&&Lb.head){
pb=Lb.head->next;
s->last=0;
pos=0;
for(pa=La.head->next;pa!=NULL;pa=pa->next)
{
while(pb)
{
if(WordCmp(pa->data,pb->data)==0)
s->eqelem[s->last++]=pos;
else if(WordCmp(pa->data,pb->data)==-1)
break;
pb=pb->next;
}//while
pos++;
pb=Lb.head->next;
}//for
}//if
}
/*--------------------------------------------*/
/* 判表空函数 */
/* 功能:判断表L是否是空表 */
/* 参数:OrderList L--有序表 */
/* 返回值:0--非空表;1--空表 */
/*--------------------------------------------*/
status ListEmpty(OrderList L)
{ if(L.size==0) return(TRUE);
return(FALSE);
}
/*-----------与文本文件有关的函数-------------*/
/*--------------------------------------------*/
/* 字符判断函数 */
/* 功能:判断文件中下一个字符是否为回车符 */
/* 参数:FILE *f--文件指针 */
/* 返回值:0--不是回车符;1--是回车符 */
/*--------------------------------------------*/
int feoln(FILE *f)
{ char cha;
cha=fgetc(f);
ungetc(cha,f);
if(cha=='\n') return(TRUE);
return(FALSE);
}
/*--------------------------------------------*/
/* 读取单词函数 */
/* 功能:从文件中读取一个单词 */
/* 参数:FILE *f--文件指针 */
/* Sequence *st--指向单词的指针 */
/* 返回值:无 */
/*--------------------------------------------*/
void GetAWord(FILE *f,Sequence *st)
{ char ch;
st->size=0;
printf("get a word\n");
do{
ch=fgetc(f);
}while(ch==' ');//do......while
if(ch=='\n')
{
st->size=0;
return;
}//if
while(ch!=' ')
{
st->ch[st->size]=ch;
st->size++;
ch=fgetc(f);
if(ch=='\n'||ch==-1)
{
ungetc(ch,f);
return;
}
}
}
/*--------------------------------------------*/
/* 读取文件当前行单词函数 */
/* 功能:提取文件指针所在行所有单词 */
/* 参数:FILE *f--文件指针 */
/* OrderList *ta--存放单词有序表的指针 */
/* 返回值:0--操作失败;1--操作成功 */
/*--------------------------------------------*/
status ExtractWord(FILE *f,OrderList *ta)
{
Sequence str;
WordType nwd;
LinkType p;
LinkType s;
printf("Extract word\n");
if(InitList(ta)==0)
{
printf("InitList ta have errors!!\n");
return (0);
}//if
while(!feof(f)&&!feoln(f))/*文件结束或行结束*/
{
GetAWord(f,&str);
if(str.size==0)
return (1);
if(NewWord(&nwd,str)==0)
{
printf("NewWord errors!\n");
return (0);
}
if(MakeNode(&p,nwd)==0)
{
printf("MakeNode errors!\n");
return (0);
}
LocateElem(*ta,nwd,&s);
InsertAfter(ta,s,p);
}//while
fgetc(f);
return (1);
}
/*--------------------------------------------*/
/* 文件单词匹配函数 */
/* 功能:统计指定单词在文件中出现的次数和位置 */
/* 参数:FILE *f--文件指针 */
/* OrderList pat--指定统计的单词有序表 */
/* ResultType rs--统计结果列表 */
/* 返回值:0--统计失败;1--统计成功 */
/*--------------------------------------------*/
waynezi 2010-12-07
  • 打赏
  • 举报
回复
下面是我的完整代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define MAXSIZE 1000
#define MAXLEN 20
#define MAXNUM 16
#define FALSE 0
#define TRUE 1
/*---------------堆结构的定义---------------*/
typedef struct{
char stores[MAXSIZE];
int freep; //当前可用空间开始位置
}HeapSpace;
HeapSpace sp;
/*-------------单词数据类型定义-------------*/
/*-----------单词在堆中的位置描述-----------*/
typedef struct{
int stadr; //单词在对空间中的开始位置
int len; //单词长度
}WordType;
/*----------------单词描述-------------------*/
typedef struct{
char ch[MAXLEN]; //单词字符串
int size; //单词长度
}Sequence;
/*---------------有序表类型定义---------------*/
/*-------------单词有序表结点定义-------------*/
typedef WordType ElemType;
typedef struct NodeType{
ElemType data;
struct NodeType *next;
}NodeType,*LinkType;
/*----------------单词有序表定义--------------*/
typedef struct{
LinkType head; //有序表头指针
LinkType tail; //有序表尾指针
int size; //有序表结点个数
}OrderList;
/*---记录一行中匹配成功单词在目标词汇表中的位置---*/
typedef struct{
int eqelem[MAXNUM]; //单词在目标词汇表中的位置
int last; //匹配成功单词的个数
}EqelemList;

/*-----------文件测试相关的数据类型定义-----------*/
/*--------------单词在文件中的位置----------------*/
typedef struct Node{
int elem; //被测单词在文件中的行号
struct Node *next;//指向下一个行号结点的指针
}Node,*Link;
/*-----------单词统计分析记录结构定义-------------*/
typedef struct{
WordType data; //被测试的单词
int count; //在文件中出现的次数
Link next; //记录出现的所有行号的脸表头指针
}HeadNode;
/*---------文本文件测试结果记录定义---------------*/
typedef HeadNode ResultType[MAXNUM];
typedef int status;
/*------------与单词相关的函数----------------*/
/*--------------------------------------------*/
/* 定义新单词函数 */
/* 功能:把新单词放入堆中 */
/* 参数:WordType *nw--单词描述信息指针 */
/* Sequence cha--单词信息 */
/* 返回值:操作成功与否的状态信息 */
/* 0--操作失败,空间不足;1--操作成功 */
/*--------------------------------------------*/
status NewWord(WordType *nw,Sequence cha)
{ int i,k;
if(sp.freep+cha.size>=MAXSIZE)
{ printf("Heap Full!\n");
getchar();
return(0);
}
else{
i=sp.freep;
sp.freep=sp.freep+cha.size;
for(k=0;k<cha.size;k++)
sp.stores[i+k]=cha.ch[k];
nw->stadr=i;
nw->len=cha.size;
return(1);
}
}
waynezi 2010-12-06
  • 打赏
  • 举报
回复
else printf("%dth line ",p->elem);
这个有问题[Quote=引用 2 楼 waynezi 的回复:]
代码太长,那应该怎么修改呢?

引用楼主 waynezi 的回复:
void OutResult(ResultType rslist,int n)
{ int i,j;
Link p;
for(i=0;i<n;i++){
printf("The word ");
PrintWord(rslist[i].data);
printf(" appeared in t……
[/Quote]
FiveYeas 2010-12-06
  • 打赏
  • 举报
回复
调试一下看看哪一行出的错啊
waynezi 2010-12-06
  • 打赏
  • 举报
回复
代码太长,那应该怎么修改呢?[Quote=引用楼主 waynezi 的回复:]
void OutResult(ResultType rslist,int n)
{ int i,j;
Link p;
for(i=0;i<n;i++){
printf("The word ");
PrintWord(rslist[i].data);
printf(" appeared in the file %d times",rslist[i].count);
……
[/Quote]
就想叫yoko 2010-12-06
  • 打赏
  • 举报
回复
贴完整代码
p是一个指针吧
初步估计你是倒数第5行这个p=p->next出了问题
内存越界了
WIN XP蓝屏代码大全 一、蓝屏含义 1、故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4) KMODE_EXCEPTION_NOT_HANDLED ***其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这个参数对于普通用户根本无法理解, 只有驱动程序编写者或者微软操作系统的开发人员才懂). 第三部分是错误名. 信息第一行通常用来识别生产错误的驱动程序或者设备. 这种信息多数很简洁, 但停机码可以作为搜索项在微软知识库和其他技术资料中使用 2.推荐操作 蓝屏第二部分是推荐用户进行的操作信息. 有, 推荐的操作仅仅是一般性的建议(比如: 到销售商网站查找BIOS的更新等); 有, 也就是显示一条与当前问题相关的提示. 一般来说, 惟一的建议就是重启. 3.调试端口告诉用户内存转储映像是否写到磁盘商了, 使用内存转储映像可以确定发生问题的性质, 还会告诉用户调试信息是否被传到另一台电脑商, 以及使用了什么端口完成这次通讯. 不过, 这里的信息对于普通用户来说, 没有什么意义.有保卫科可以顺利的查到是哪个生产小组的问题, 会在第一部分明确报告是哪个文件犯的错, 但常常它也只能查个大概范围, 而无法明确指明问题所在. 由于工厂全面被迫停止, 只有重新整顿开工, 有, 那个生产小组会意识到错误 , 不再重犯. 但有仍然会试图哄抢零件, 于是厂领导不得不重复停工决定(不能启动并显示蓝屏信息, 或在进行相同操作再次出现蓝屏). 二、蓝屏的处理方法 Windows 2K/XP蓝屏信息非常多, 无法在一篇文章中全面讲解, 但他们产生的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等, 因此首先为大家提供了一些常规的解决方案, 在遇到蓝屏错误, 应先对照这些方案进行排除. 1.重启 有只是某个程序或驱动程序一犯错, 重启后他们会改过自新.(注意:此参见7.查询停机码) 2.新硬件 首先, 应该检查新硬件是否插牢, 这个被许多人忽视的问题往往会引发许多莫名其妙的故障. 如果确认没有问题, 将其拔下, 然后换个插槽试试, 并安装最新的驱动程序. 同还应对照微软网站的硬件兼容类别检查一下硬件是否与操作系统兼容. 如果你的硬件没有在表中, 那么就得到硬件厂商网站进行查询, 或者拨打他们的咨询电话. Windows XP的硬件兼容列表 Windows 2K的硬件兼容类别 3.新驱动和新服务 如果刚安装完某个硬件的新驱动, 或安装了某个软件, 而它又在系统服务中添加了相应项目(比如:杀毒软件、CPU降温软件、防火墙软件等), 在重启或使用中出现了蓝屏故障, 请到安全模式来卸载或禁用它们. 4.检查病毒 比如冲击波和振荡波等病毒有会导致Windows蓝屏死机, 因此查杀病毒必不可少. 同一些木马间谍软件也会引发蓝屏, 所以最好再用相关工具进行扫描检查. 5.检查BIOS和硬件兼容性 对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级. 小提示: BIOS的缓存和映射项 Video BIOS Shadowing (视频BIOS映射) Shadowing address ranges(映射地址列) System BIOS Cacheable(系统BIOS缓冲) Video BIOS Cacheable(视频BIOS缓冲) Video RAM Cacheable(视频内存缓冲) 6.检查系统日志 在开始-->菜单中输入:EventVwr.msc, 回车出现"事件查看器", 注意检查其中的"系统日志"和"应用程序日志"中表明"错误"的项. 7.查询停机码 把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站http://support.microsoft.com?, 在左上角的"搜索(知识库)"中输入停机码, 如果搜索结果没有适合信息, 可以选择"英文知识库"在搜索一遍. 一般情况下, 会在这里找到有用的解决案例. 另外, 在baidu、Google等搜索引擎中使用蓝屏的停机码或者后面的说明文字为关键词搜索, 往往也会有以外的收获. 8.最后一次正确配置 一般情况下, 蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后, 这Windows 2K/XP提供的"最后一次正确配置"就是解决蓝屏的快捷方式. 重启系统, 在出现启动菜单按下F8键就会出现高级启动选项菜单, 接着选择"最后一次正确配置". 9.安装最新的系统补丁和Service Pack 有些蓝屏是Windows本身存在缺陷造成的, 应此可通过安装最新的系统补丁和Service Pack来解决. 三、蓝屏代码含义和解决方案 1、0x0000000A:IRQL_NOT_LESS_OR_EQUAL ◆错误分析:主要是由问题的驱动程序、有缺陷或不兼容的硬件与软件造成的. 从技术角度讲. 表明在内核模式中存在以太高的进程内部请求级别(IRQL)访问其没有权限访问的内存地址. ◇解决方案:请用前面介绍的解决方案中的2、3、5、8、9方案尝试排除. 2、0x00000012:TRAP_CAUSE_UNKNOWN ◆错误分析:如果遇到这个错误信息, 那么很不幸, 应为KeBudCheck分析的结果是错误原因 未知. ◇解决方案:既然微软都帮不上忙, 就得靠自己了, 请仔细回想这个错误是什么候出现的; 第一次发生你对系统做了哪些操作; 发生正在进行什么操作. 从这些信息中找出可能的原因, 从而选择相应解决方案尝试排除. 3、0x0000001A:MEMORY_MANAGEMENT ◆错误分析:这个内存管理错误往往是由硬件引起的, 比如: 新安装的硬件、内存本身有问题等. ◇解决方案:如果是在安装Windows出现, 有可能是由于你的电脑达不到安装Windows的最小内存和磁盘要求. 4、0x0000001E:KMODE_EXCEPTION_NOT_HANDLED ◆错误分析:Windows内核检查到一个非法或者未知的进程指令, 这个停机码一般是由问题的内存或是与前面0x0000000A相似的原因造成的. ◇解决方案: (1)硬件兼容有问题:请对照前面提到的最新硬件兼容性列表, 查看所有硬件是否包含在该列表中. (2)有问题的设备驱动、系统服务或内存冲突和中断冲突: 如果在蓝屏信息中出现了驱动程序的名字, 请试着在安装模式或者故障恢复控制台中禁用或删除驱动程序, 并禁用所有刚安装的驱动和软件. 如果错误出现在系统启动过程中, 请进入安全模式, 将蓝屏信息中所标明的文件重命名或者删除. (3)如果错误信息中明确指出Win32K.sys: 很有可能是第三方远程控制软件造成的, 需要从故障恢复控制台中将对该软件的服务关闭. (4)在安装Windows后第一次重启出现:最大嫌疑可能系统分区的磁盘空间不足或BIOS兼容有问题. (5)如果是在关闭某个软件出现的:很有可能软件本省存在设计缺陷, 请升级或卸载它. 5、0x00000023:FAT_FILE_SYSTEM 0x00000024:NTFS_FILE_SYSTEM ◆错误分析:0x00000023通常发生在读写FAT16或者FAT32文件系统的系统分区, 而 0x00000024则是由于NTFS.sys文件出现错误(这个驱动文件的作用是容许系统读写使用 NTFS文件系统的磁盘). 这两个蓝屏错误很有可能是磁盘本身存在物理损坏, 或是中断要求封包(IRP)损坏而导致的. 其他原因还包括:硬盘磁盘碎片过多; 文件读写操作过于频繁, 并且数据量非常达或者是由于一些磁盘镜像软件或杀毒软件引起的. ◇解决方案: 第一步:首先打开命令行提示符, 运行"Chkdsk /r"(注:不是CHKDISK, 感觉象这个, 但是……)命令检查并修复硬盘错误, 如果报告存在怀道(Bad Track), 请使用硬盘厂商提供的检查工具进行检查和修复. 第二步:接着禁用所有即使扫描文件的软件, 比如:杀毒软件、防火墙或备份工具. 第三步:右击C:\winnt\system32\drivers\fastfat.sys文件并选择"属性", 查看其版本是否与当前系统所使用的Windows版本相符.(注:如果是XP, 应该是C:\windows\system32 \drivers\fastfat.sys) 第四步:安装最新的主板驱动程序, 特别IDE驱动. 如果你的光驱、可移动存储器也提供有驱动程序, 最好将它们升级至最新版. 6、0x00000027:RDR_FILE_SYSTEM ◆错误分析:这个错误产生的原因很难判断, 不过Windows内存管理出了问题很可能会导致这个停机码的出现. ◇解决方案:如果是内存管理的缘故, 通常增加内存会解决问题. 7、0x0000002EATA_BUS_ERROR ◆错误分析:系统内存存储器奇偶校验产生错误, 通常是因为有缺陷的内存(包括物理内存、二级缓存或者显卡显存)设备驱动程序访问不存在的内存地址等原因引起的. 另外, 硬盘被病毒或者其他问题所损伤, 以出现这个停机码. ◇解决方案: (1)检查病毒 (2)使用"chkdsk /r"命令检查所有磁盘分区. (3)用Memtest86等内存测试软件检查内存. (4)检查硬件是否正确安装, 比如:是否牢固、金手指是否有污渍. 8、0x00000035:NO_MORE_IRP_STACK_LOCATIONS ◆错误分析:从字面上理解, 应该驱动程序或某些软件出现堆栈问题. 其实这个故障的真正原因应该驱动程序本省存在问题, 或是内存有质量问题. ◇解决方案:请使用前面介绍的常规解决方案中与驱动程序和内存相关的方案进行排除. 9、0x0000003F:NO_MORE_SYSTEM_PTES ◆错误分析:一个与系统内存管理相关的错误, 比如:由于执行了大量的输入/输出操作, 造成内存管理出现问题: 有缺陷的驱动程序不正确地使用内存资源; 某个应用程序(比如:备份软件)被分配了大量的内核内存等. ◇解决方案:卸载所有最新安装的软件(特别是哪些增强磁盘性能的应用程序和杀毒软件)和驱动程序. 10、0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS ◆错误分析:通常是由硬件驱动程序引起的. ◇解决方案:卸载最近安装的驱动程序. 这个故障很少出现, 目前已经知道的是, 在使用 www.in-system.com/这家公司的某些软件会出现, 其中的罪魁就是Falstaff.sys文件.(作者难道不怕吃官司嘛, 把公司网址公布) 11、0x00000050: PAGE_FAULT_IN_NONPAGED+AREA ◆错误分析:有问题的内存(包括屋里内存、二级缓存、显存)、不兼容的软件(主要是远程控制和杀毒软件)、损坏的NTFS卷以及有问题的硬件(比如: PCI插卡本身已损坏)等都会引发这个错误. ◇解决方案:请使用前面介绍的常规解决方案中与内存、软件、硬件、硬盘等相关的方案进 行排除. 12、0x00000051:REGISTRY_ERROR ◆错误分析:这个停机码说明注册表或系统配置管理器出现错误, 由于硬盘本身有物理损坏或文件系统存在问题, 从而造成在读取注册文件出现输入/输出错误. ◇解决方案:使用"chkdsk /r"检查并修复磁盘错误. 13、0x00000058:FTDISK_INTERNAL_ERROR ◆错误分析:说明在容错集的主驱动发生错误. ◇解决方案:首先尝试重启电脑看是否能解决问题, 如果不行, 则尝试"最后一次正确配置"进行解决. 14、0x0000005E:CRITICAL_SERVICE_FAILED ◆错误分析:某个非常重要的系统服务启动识别造成的. ◇解决方案:如果是在安装了某个新硬件后出新的, 可以先移除该硬件, 并通过网上列表检查它是否与Windows 2K/XP兼容, 接着启动电脑, 如果蓝屏还是出现, 请使用"最后一次正确配置"来启动Windows, 如果这样还是失败, 建议进行修复安装或是重装. 15、0x0000006F:SESSION3_INITIALIZATION-FAILED ◆错误分析:这个错误通常出现在Windows启动, 一般是由有问题的驱动程序或损坏的系统文件引起的. ◇解决方案:建议使用Windows安装光盘对系统进行修复安装. 16、0x00000076ROCESS_HAS_LOCKED_PAGES ◆错误分析:通常是因为某个驱动程序在完成了一次输入/输出操作后, 没有正确释放所占有的内存 ◇解决方案: 第一步:点击开始-->运行:regedt32, 找到[HKLM\SYSTEM\Currentcontrol set\control\session manager\memory management], 在右侧新建双字节值"TrackLockedPages", 值为1. 这样Windows便会在错误再次出现跟踪到是哪个驱动程序的问题.第二步:如果再次出现蓝屏, 那么错误信息会变成:STOP:0x0000000CB(0xY,0xY,0xY,0xY)DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS其中第四个"0xY"会显示为问题驱动程序的名字, 接着对其进行更新或删除.第三步:进入注册表, 删除添加的"TrackLockedPages". 17、0x00000077:KERNEL_STACK_INPAGE_ERROR ◆错误分析:说明需要使用的内核数据没有在虚拟内存或物理内存中找到. 这个错误常常于是着磁盘有问题, 相应数据损坏或受到病毒侵蚀. ◇解决方案:使用杀毒软件扫描系统; 使用"chkdsk /r"命令检查并修复磁盘错误, 如不行则使用磁盘厂商提供的工具检查修复. 18、0x0000007A:KERNEL_DATA_INPAGE_ERROR ◆错误分析:这个错误往往是虚拟内存中的内核数据无法读入内存造成的. 原因可能是虚拟内存页面文件中存在坏簇、病毒、磁盘控制器出错、内存有问题. ◇解决方案:首先用升级为最新病毒库杀毒软件查杀病毒, 如果促无信息中还0xC000009C 或0xC000016A代码, 那么表示是坏簇造成的, 并且系统的磁盘检测工具无法自动修复, 这要进入"故障恢复控制台", 用"chkdsk /r"命令进行手动修复. 19、0x0000007B:INACESSIBLE_BOOT_DEVICE ◆错误分析:Windows在启动过程中无法访问系统分区或启动卷. 一般发生在更换主板后第一次启动, 主要是因为新主板和旧主板的IDE控制器使用了不同芯片组造成的. 有也可能是病毒或硬盘损伤所引起的. ◇解决方案:一般只要用安装光盘启动电脑, 然后执行修复安装即可解决问题. 对于病毒则可使用DOS版的杀毒软件进行查杀(主战有kv2005DOS版下载). 如果是硬盘本身存在问题, 请将其安装到其他电脑中, 然后使用"chkdsk /r"来检查并修复磁盘错误. 20、0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED ◆错误分析:系统进程产生错误, 但Windows错误处理器无法捕获. 其产生原因很多, 包括:硬件兼容性、有问题的驱动程序或系统服务、 或者是某些软件. ◇解决方案:请使用"事件查看器"来获取更多的信息, 从中发现错误根源.(发现好像不是解决哦, 看来这里大家要自力更生了!) 21、0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP ◆错误分析:一般是由于有问题的硬件(比如:内存)或某些软件引起的. 有超频也会产生这个错误. ◇解决方案:用检测软件(比如:Memtest86)检查内存, 如果进行了超频, 请取消超频. 将PCI硬件插卡从主板插槽拔下来, 或更换插槽. 另外, 有些主板(比如:nForce2主板)在进行超频后, 南桥芯片过热也会导致蓝屏, 此为该芯片单独增加散热片往往可以有效解决问题. 22、0x00000080:NMI_HARDWARE_FAILURE ◆错误分析:通常是有硬件引起的.(似乎蓝屏与硬件错误有不解之缘) ◇解决方案:如果最近安装了新硬件, 请将其移除, 然后试试更换插槽和安装最新的驱动程序, 如果升级了驱动程序, 请恢复后原来的版本; 检查内存金手指是否有污染和损坏; 扫描病毒; 运行"chkdsk /r"检查并修复磁盘错误; 检查所有硬件插卡已经插牢. 如果以上尝试都无效果, 就得找专业的电脑维修公司请求帮助了. 23、0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED ◆错误分析:内核级应用程序产生了错误, 但Windows错误处理器没有捕获. 通常是硬件兼容性错误. ◇解决方案:升级驱动程序或升级BIOS. 24、0x0000009C:MACHINE_CHECK_EXCEPTION ◆错误分析:通常是硬件引起的. 一般是因为超频或是硬件存在问题(内存、CPU、总线、电 源). ◇解决方案:如果进行了超频, 请降会CPU原来频率, 检查硬件. 25、0x0000009FRIVER_POWER_STATE_FAILURE ◆错误分析:往往与电源有关系, 常常发生在与电源相关的操作, 比如:关机、待机或休睡. ◇解决方案:重装系统, 如果不能解决, 请更换电源. 26、0x000000A5:ACPI_BIOS_ERROR ◆错误分析:通常是因为主板BIOS不能全面支持ACPI规范. ◇解决方案:如果没有相应BIOS升级, 那么可在安装Windows 2K/XP, 当出现"press F6 if you need to install a third-party SCSI or RAID driver"提示, 按下F7键, 这样Windows便会自动禁止安装ACPI HAL, 而安装 Standard PC HAL. 27、0x000000B4:VIDEO_DRIVER_INIT_FAILURE ◆错误分析:这个停止信息表示Windows因为不能启动显卡驱动, 从而无法进入图形界面. 通常是显卡的问题, 或者是存在与显卡的硬件冲突(比如:与并行或串行端口冲突). ◇解决方案:进入安全模式查看问题是否解决, 如果可以, 请升级最新的显卡驱动程序, 如果还不行, 则很可能是显卡与并行端口存在冲突, 需要在安全模式按下WIN+break组合键打开"系统属性", 在硬件-->设备管理器中找到并双击连接打印的LPT1端口的项, 在"资源"选项卡中取消"使用自动配置"的构选, 然后将"输入/输出范围"的"03BC"改为"0378". 28、0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY ◆错误分析:某个驱动程序试图向只读内存写入数据造成的. 通常是在安装了新的驱动程序, 系统服务或升级了设备的固件程序后. ◇解决方案:如果在错误信息中包含有驱动程序或者服务文件名称, 请根据这个信息将新安装的驱动程序或软件卸载或禁用. 29、0x000000C2:BAD_POOL_CALLER ◆错误分析:一个内核层的进程或驱动程序错误地试图进入内存操作. 通常是驱动程序或存在BUG的软件造成的. ◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除. 30、0x000000CERIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS ◆错误分析:通常是由有问题的驱动程序或系统服务造成的. ◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除. 31、0x000000D1RIVER_IRQL_NOT_LESS_OR_EQUAL ◆错误分析:通常是由有问题的驱动程序引起的(比如罗技鼠标的Logitech MouseWare 9.10和9.24版驱动程序会引发这个故障). 同,有缺陷的内存、 损坏的虚拟内存文件、 某些软件(比如多媒体软件、杀毒软件、备份软件、DVD播放软件)等也会导致这个错误. ◇解决方案:检查最新安装或升级的驱动程序(如果蓝屏中出现"acpi.sys"等类似文件名, 可以非常肯定驱动程序问题)和软件; 测试内存是否存在问题; 进入"故障恢复控制台", 转到虚拟内存页面文件Pagefile.sys所在分区, 执行"del pagefile.sys"命令, 将页面文件删除; 然后在页面文件所在分区执行"chkdsk /r"命令;进入Windows后重新设置虚拟内存.如果在上网遇到这个蓝屏, 而你恰恰又在进行大量的数据下载和上传(比如:网络游戏、BT下载), 那么应该是网卡驱动的问题, 需要升级其驱动程序. 32、0x000000EA:THREAD_STUCK_IN_DEVICE_DRIVER ◆错误分析:通常是由显卡或显卡驱动程序引发的. ◇解决方案:先升级最新的显卡驱动, 如果不行, 则需要更换显卡测试故障是否依然发生. 33、0x000000ED:UNMOUNTABLE_BOOT_VOLUME ◆错误分析:一般是由于磁盘存在错误导致的, 有也建议检查硬盘连线是否接触不良, 或是没有使用合乎该硬盘传输规格的连接线, 例如ATA-100仍使用ATA-33的连接线, 对低速硬盘无所谓, 但告诉硬盘(支持ATA-66以上)的要求较严格, 规格不对的连线有也会引起这类没办法开机的故障. 如果在修复后, 还是经常出现这个错误, 很可能是硬盘损坏的前兆. ◇解决方案:一般情况下, 重启会解决问题, 不管怎么样都建议执行"chkdsk /r"命令来检查修复硬盘 34、0x000000F2:HARDWARE)INTERRUPT_STORM ◆错误分析:内核层检查到系统出现中断风暴, 比如:某个设备在完成操作后没有释放所占用 的中断. 通常这是由缺陷的驱动程序造成的. ◇解决方案:升级或卸载最新安装的硬件驱动程序. 35、0x00000135:UNABLE_TO_LOCATE_DLL ◆错误分析:通常表示某个文件丢失或已经损坏, 或者是注册表出现错误. ◇解决方案:如果是文件丢失或损坏, 在蓝屏信息中通常会显示相应的文件名, 你可以通过网络或是其他电脑找到相应的文件, 并将其复制到系统文件夹下的SYSTEM32子文件夹中. 如果没有显示文件名, 那就很有可能是注册表损坏, 请利用系统还原或是以前的注册表备份进行恢复. 36、0x0000021A:STATUS_SYSTEM_PROCESS_TERMINATED ◆错误分析:用户模式子系统, 例如Winlogon或客服服务运行子系统(CSRSS)已损坏, 所以无法再保证安全性, 导致系统无法启动. 有, 当系统管理员错误地修改了用户帐号权限, 导致其无法访问系统文件和文件夹. ◇解决方案:使用"最后一次正确的配置", 如果无效, 可使用安装光盘进行修复安装. 37、STOP 0xC0000221 or STATUS_IMAGE_CHECKSUM_MISMATCH ◆错误分析:通常是由于驱动程序或系统DLL文件损坏造成的. 一般情况下, 在蓝屏中会出现 文件名称 ◇解决方案: (1)使用Windows安装光盘进行修复安装; (2)如果还能进入安全模式, 可以"开始-->运行": sfc /scannow (3)还可以采用提取文件的方法来解决, 进入"故障恢复控制台", 使用copy或expand命令从光盘中复制或解压受损的文件. 不过, 蓝屏一般都是驱动程序文件的问题, 所以expand命令会用的都一些, 比如:蓝屏中提示tdi.sys文件, 因为驱动文件一般在i386\driver压缩包里, 所以使用: expand
WIN XP蓝屏代码大全 一、蓝屏含义 1、故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4) KMODE_EXCEPTION_NOT_HANDLED ***其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这个参数对于普通用户根本无法理解, 只有驱动程序编写者或者微软操作系统的开发人员才懂). 第三部分是错误名. 信息第一行通常用来识别生产错误的驱动程序或者设备. 这种信息多数很简洁, 但停机码可以作为搜索项在微软知识库和其他技术资料中使用 2.推荐操作 蓝屏第二部分是推荐用户进行的操作信息. 有, 推荐的操作仅仅是一般性的建议(比如: 到销售商网站查找BIOS的更新等); 有, 也就是显示一条与当前问题相关的提示. 一般来说, 惟一的建议就是重启. 3.调试端口告诉用户内存转储映像是否写到磁盘商了, 使用内存转储映像可以确定发生问题的性质, 还会告诉用户调试信息是否被传到另一台电脑商, 以及使用了什么端口完成这次通讯. 不过, 这里的信息对于普通用户来说, 没有什么意义.有保卫科可以顺利的查到是哪个生产小组的问题, 会在第一部分明确报告是哪个文件犯的错, 但常常它也只能查个大概范围, 而无法明确指明问题所在. 由于工厂全面被迫停止, 只有重新整顿开工, 有, 那个生产小组会意识到错误 , 不再重犯. 但有仍然会试图哄抢零件, 于是厂领导不得不重复停工决定(不能启动并显示蓝屏信息, 或在进行相同操作再次出现蓝屏). 二、蓝屏的处理方法 Windows 2K/XP蓝屏信息非常多, 无法在一篇文章中全面讲解, 但他们产生的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等, 因此首先为大家提供了一些常规的解决方案, 在遇到蓝屏错误, 应先对照这些方案进行排除. 1.重启 有只是某个程序或驱动程序一犯错, 重启后他们会改过自新.(注意:此参见7.查询停机码) 2.新硬件 首先, 应该检查新硬件是否插牢, 这个被许多人忽视的问题往往会引发许多莫名其妙的故障. 如果确认没有问题, 将其拔下, 然后换个插槽试试, 并安装最新的驱动程序. 同还应对照微软网站的硬件兼容类别检查一下硬件是否与操作系统兼容. 如果你的硬件没有在表中, 那么就得到硬件厂商网站进行查询, 或者拨打他们的咨询电话. Windows XP的硬件兼容列表 Windows 2K的硬件兼容类别 3.新驱动和新服务 如果刚安装完某个硬件的新驱动, 或安装了某个软件, 而它又在系统服务中添加了相应项目(比如:杀毒软件、CPU降温软件、防火墙软件等), 在重启或使用中出现了蓝屏故障, 请到安全模式来卸载或禁用它们. 4.检查病毒 比如冲击波和振荡波等病毒有会导致Windows蓝屏死机, 因此查杀病毒必不可少. 同一些木马间谍软件也会引发蓝屏, 所以最好再用相关工具进行扫描检查. 5.检查BIOS和硬件兼容性 对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级. 小提示: BIOS的缓存和映射项 Video BIOS Shadowing (视频BIOS映射) Shadowing address ranges(映射地址列) System BIOS Cacheable(系统BIOS缓冲) Video BIOS Cacheable(视频BIOS缓冲) Video RAM Cacheable(视频内存缓冲) 6.检查系统日志 在开始-->菜单中输入:EventVwr.msc, 回车出现"事件查看器", 注意检查其中的"系统日志"和"应用程序日志"中表明"错误"的项. 7.查询停机码 把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站http://support.microsoft.com?, 在左上角的"搜索(知识库)"中输入停机码, 如果搜索结果没有适合信息, 可以选择"英文知识库"在搜索一遍. 一般情况下, 会在这里找到有用的解决案例. 另外, 在baidu、Google等搜索引擎中使用蓝屏的停机码或者后面的说明文字为关键词搜索, 往往也会有以外的收获. 8.最后一次正确配置 一般情况下, 蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后, 这Windows 2K/XP提供的"最后一次正确配置"就是解决蓝屏的快捷方式. 重启系统, 在出现启动菜单按下F8键就会出现高级启动选项菜单, 接着选择"最后一次正确配置". 9.安装最新的系统补丁和Service Pack 有些蓝屏是Windows本身存在缺陷造成的, 应此可通过安装最新的系统补丁和Service Pack来解决. 三、蓝屏代码含义和解决方案 1、0x0000000A:IRQL_NOT_LESS_OR_EQUAL ◆错误分析:主要是由问题的驱动程序、有缺陷或不兼容的硬件与软件造成的. 从技术角度讲. 表明在内核模式中存在以太高的进程内部请求级别(IRQL)访问其没有权限访问的内存地址. ◇解决方案:请用前面介绍的解决方案中的2、3、5、8、9方案尝试排除. 2、0x00000012:TRAP_CAUSE_UNKNOWN ◆错误分析:如果遇到这个错误信息, 那么很不幸, 应为KeBudCheck分析的结果是错误原因 未知. ◇解决方案:既然微软都帮不上忙, 就得靠自己了, 请仔细回想这个错误是什么候出现的; 第一次发生你对系统做了哪些操作; 发生正在进行什么操作. 从这些信息中找出可能的原因, 从而选择相应解决方案尝试排除. 3、0x0000001A:MEMORY_MANAGEMENT ◆错误分析:这个内存管理错误往往是由硬件引起的, 比如: 新安装的硬件、内存本身有问题等. ◇解决方案:如果是在安装Windows出现, 有可能是由于你的电脑达不到安装Windows的最小内存和磁盘要求. 4、0x0000001E:KMODE_EXCEPTION_NOT_HANDLED ◆错误分析:Windows内核检查到一个非法或者未知的进程指令, 这个停机码一般是由问题的内存或是与前面0x0000000A相似的原因造成的. ◇解决方案: (1)硬件兼容有问题:请对照前面提到的最新硬件兼容性列表, 查看所有硬件是否包含在该列表中. (2)有问题的设备驱动、系统服务或内存冲突和中断冲突: 如果在蓝屏信息中出现了驱动程序的名字, 请试着在安装模式或者故障恢复控制台中禁用或删除驱动程序, 并禁用所有刚安装的驱动和软件. 如果错误出现在系统启动过程中, 请进入安全模式, 将蓝屏信息中所标明的文件重命名或者删除. (3)如果错误信息中明确指出Win32K.sys: 很有可能是第三方远程控制软件造成的, 需要从故障恢复控制台中将对该软件的服务关闭. (4)在安装Windows后第一次重启出现:最大嫌疑可能系统分区的磁盘空间不足或BIOS兼容有问题. (5)如果是在关闭某个软件出现的:很有可能软件本省存在设计缺陷, 请升级或卸载它. 5、0x00000023:FAT_FILE_SYSTEM 0x00000024:NTFS_FILE_SYSTEM ◆错误分析:0x00000023通常发生在读写FAT16或者FAT32文件系统的系统分区, 而 0x00000024则是由于NTFS.sys文件出现错误(这个驱动文件的作用是容许系统读写使用 NTFS文件系统的磁盘). 这两个蓝屏错误很有可能是磁盘本身存在物理损坏, 或是中断要求封包(IRP)损坏而导致的. 其他原因还包括:硬盘磁盘碎片过多; 文件读写操作过于频繁, 并且数据量非常达或者是由于一些磁盘镜像软件或杀毒软件引起的. ◇解决方案: 第一步:首先打开命令行提示符, 运行"Chkdsk /r"(注:不是CHKDISK, 感觉象这个, 但是……)命令检查并修复硬盘错误, 如果报告存在怀道(Bad Track), 请使用硬盘厂商提供的检查工具进行检查和修复. 第二步:接着禁用所有即使扫描文件的软件, 比如:杀毒软件、防火墙或备份工具. 第三步:右击C:\winnt\system32\drivers\fastfat.sys文件并选择"属性", 查看其版本是否与当前系统所使用的Windows版本相符.(注:如果是XP, 应该是C:\windows\system32 \drivers\fastfat.sys) 第四步:安装最新的主板驱动程序, 特别IDE驱动. 如果你的光驱、可移动存储器也提供有驱动程序, 最好将它们升级至最新版. 6、0x00000027:RDR_FILE_SYSTEM ◆错误分析:这个错误产生的原因很难判断, 不过Windows内存管理出了问题很可能会导致这个停机码的出现. ◇解决方案:如果是内存管理的缘故, 通常增加内存会解决问题. 7、0x0000002EATA_BUS_ERROR ◆错误分析:系统内存存储器奇偶校验产生错误, 通常是因为有缺陷的内存(包括物理内存、二级缓存或者显卡显存)设备驱动程序访问不存在的内存地址等原因引起的. 另外, 硬盘被病毒或者其他问题所损伤, 以出现这个停机码. ◇解决方案: (1)检查病毒 (2)使用"chkdsk /r"命令检查所有磁盘分区. (3)用Memtest86等内存测试软件检查内存. (4)检查硬件是否正确安装, 比如:是否牢固、金手指是否有污渍. 8、0x00000035:NO_MORE_IRP_STACK_LOCATIONS ◆错误分析:从字面上理解, 应该驱动程序或某些软件出现堆栈问题. 其实这个故障的真正原因应该驱动程序本省存在问题, 或是内存有质量问题. ◇解决方案:请使用前面介绍的常规解决方案中与驱动程序和内存相关的方案进行排除. 9、0x0000003F:NO_MORE_SYSTEM_PTES ◆错误分析:一个与系统内存管理相关的错误, 比如:由于执行了大量的输入/输出操作, 造成内存管理出现问题: 有缺陷的驱动程序不正确地使用内存资源; 某个应用程序(比如:备份软件)被分配了大量的内核内存等. ◇解决方案:卸载所有最新安装的软件(特别是哪些增强磁盘性能的应用程序和杀毒软件)和驱动程序. 10、0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS ◆错误分析:通常是由硬件驱动程序引起的. ◇解决方案:卸载最近安装的驱动程序. 这个故障很少出现, 目前已经知道的是, 在使用 www.in-system.com/这家公司的某些软件会出现, 其中的罪魁就是Falstaff.sys文件.(作者难道不怕吃官司嘛, 把公司网址公布) 11、0x00000050: PAGE_FAULT_IN_NONPAGED+AREA ◆错误分析:有问题的内存(包括屋里内存、二级缓存、显存)、不兼容的软件(主要是远程控制和杀毒软件)、损坏的NTFS卷以及有问题的硬件(比如: PCI插卡本身已损坏)等都会引发这个错误. ◇解决方案:请使用前面介绍的常规解决方案中与内存、软件、硬件、硬盘等相关的方案进 行排除. 12、0x00000051:REGISTRY_ERROR ◆错误分析:这个停机码说明注册表或系统配置管理器出现错误, 由于硬盘本身有物理损坏或文件系统存在问题, 从而造成在读取注册文件出现输入/输出错误. ◇解决方案:使用"chkdsk /r"检查并修复磁盘错误. 13、0x00000058:FTDISK_INTERNAL_ERROR ◆错误分析:说明在容错集的主驱动发生错误. ◇解决方案:首先尝试重启电脑看是否能解决问题, 如果不行, 则尝试"最后一次正确配置"进行解决. 14、0x0000005E:CRITICAL_SERVICE_FAILED ◆错误分析:某个非常重要的系统服务启动识别造成的. ◇解决方案:如果是在安装了某个新硬件后出新的, 可以先移除该硬件, 并通过网上列表检查它是否与Windows 2K/XP兼容, 接着启动电脑, 如果蓝屏还是出现, 请使用"最后一次正确配置"来启动Windows, 如果这样还是失败, 建议进行修复安装或是重装. 15、0x0000006F:SESSION3_INITIALIZATION-FAILED ◆错误分析:这个错误通常出现在Windows启动, 一般是由有问题的驱动程序或损坏的系统文件引起的. ◇解决方案:建议使用Windows安装光盘对系统进行修复安装. 16、0x00000076ROCESS_HAS_LOCKED_PAGES ◆错误分析:通常是因为某个驱动程序在完成了一次输入/输出操作后, 没有正确释放所占有的内存 ◇解决方案: 第一步:点击开始-->运行:regedt32, 找到[HKLM\SYSTEM\Currentcontrol set\control\session manager\memory management], 在右侧新建双字节值"TrackLockedPages", 值为1. 这样Windows便会在错误再次出现跟踪到是哪个驱动程序的问题.第二步:如果再次出现蓝屏, 那么错误信息会变成:STOP:0x0000000CB(0xY,0xY,0xY,0xY)DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS其中第四个"0xY"会显示为问题驱动程序的名字, 接着对其进行更新或删除.第三步:进入注册表, 删除添加的"TrackLockedPages". 17、0x00000077:KERNEL_STACK_INPAGE_ERROR ◆错误分析:说明需要使用的内核数据没有在虚拟内存或物理内存中找到. 这个错误常常于是着磁盘有问题, 相应数据损坏或受到病毒侵蚀. ◇解决方案:使用杀毒软件扫描系统; 使用"chkdsk /r"命令检查并修复磁盘错误, 如不行则使用磁盘厂商提供的工具检查修复. 18、0x0000007A:KERNEL_DATA_INPAGE_ERROR ◆错误分析:这个错误往往是虚拟内存中的内核数据无法读入内存造成的. 原因可能是虚拟内存页面文件中存在坏簇、病毒、磁盘控制器出错、内存有问题. ◇解决方案:首先用升级为最新病毒库杀毒软件查杀病毒, 如果促无信息中还0xC000009C 或0xC000016A代码, 那么表示是坏簇造成的, 并且系统的磁盘检测工具无法自动修复, 这要进入"故障恢复控制台", 用"chkdsk /r"命令进行手动修复. 19、0x0000007B:INACESSIBLE_BOOT_DEVICE ◆错误分析:Windows在启动过程中无法访问系统分区或启动卷. 一般发生在更换主板后第一次启动, 主要是因为新主板和旧主板的IDE控制器使用了不同芯片组造成的. 有也可能是病毒或硬盘损伤所引起的. ◇解决方案:一般只要用安装光盘启动电脑, 然后执行修复安装即可解决问题. 对于病毒则可使用DOS版的杀毒软件进行查杀(主战有kv2005DOS版下载). 如果是硬盘本身存在问题, 请将其安装到其他电脑中, 然后使用"chkdsk /r"来检查并修复磁盘错误. 20、0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED ◆错误分析:系统进程产生错误, 但Windows错误处理器无法捕获. 其产生原因很多, 包括:硬件兼容性、有问题的驱动程序或系统服务、 或者是某些软件. ◇解决方案:请使用"事件查看器"来获取更多的信息, 从中发现错误根源.(发现好像不是解决哦, 看来这里大家要自力更生了!) 21、0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP ◆错误分析:一般是由于有问题的硬件(比如:内存)或某些软件引起的. 有超频也会产生这个错误. ◇解决方案:用检测软件(比如:Memtest86)检查内存, 如果进行了超频, 请取消超频. 将PCI硬件插卡从主板插槽拔下来, 或更换插槽. 另外, 有些主板(比如:nForce2主板)在进行超频后, 南桥芯片过热也会导致蓝屏, 此为该芯片单独增加散热片往往可以有效解决问题. 22、0x00000080:NMI_HARDWARE_FAILURE ◆错误分析:通常是有硬件引起的.(似乎蓝屏与硬件错误有不解之缘) ◇解决方案:如果最近安装了新硬件, 请将其移除, 然后试试更换插槽和安装最新的驱动程序, 如果升级了驱动程序, 请恢复后原来的版本; 检查内存金手指是否有污染和损坏; 扫描病毒; 运行"chkdsk /r"检查并修复磁盘错误; 检查所有硬件插卡已经插牢. 如果以上尝试都无效果, 就得找专业的电脑维修公司请求帮助了. 23、0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED ◆错误分析:内核级应用程序产生了错误, 但Windows错误处理器没有捕获. 通常是硬件兼容性错误. ◇解决方案:升级驱动程序或升级BIOS. 24、0x0000009C:MACHINE_CHECK_EXCEPTION ◆错误分析:通常是硬件引起的. 一般是因为超频或是硬件存在问题(内存、CPU、总线、电 源). ◇解决方案:如果进行了超频, 请降会CPU原来频率, 检查硬件. 25、0x0000009FRIVER_POWER_STATE_FAILURE ◆错误分析:往往与电源有关系, 常常发生在与电源相关的操作, 比如:关机、待机或休睡. ◇解决方案:重装系统, 如果不能解决, 请更换电源. 26、0x000000A5:ACPI_BIOS_ERROR ◆错误分析:通常是因为主板BIOS不能全面支持ACPI规范. ◇解决方案:如果没有相应BIOS升级, 那么可在安装Windows 2K/XP, 当出现"press F6 if you need to install a third-party SCSI or RAID driver"提示, 按下F7键, 这样Windows便会自动禁止安装ACPI HAL, 而安装 Standard PC HAL. 27、0x000000B4:VIDEO_DRIVER_INIT_FAILURE ◆错误分析:这个停止信息表示Windows因为不能启动显卡驱动, 从而无法进入图形界面. 通常是显卡的问题, 或者是存在与显卡的硬件冲突(比如:与并行或串行端口冲突). ◇解决方案:进入安全模式查看问题是否解决, 如果可以, 请升级最新的显卡驱动程序, 如果还不行, 则很可能是显卡与并行端口存在冲突, 需要在安全模式按下WIN+break组合键打开"系统属性", 在硬件-->设备管理器中找到并双击连接打印的LPT1端口的项, 在"资源"选项卡中取消"使用自动配置"的构选, 然后将"输入/输出范围"的"03BC"改为"0378". 28、0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY ◆错误分析:某个驱动程序试图向只读内存写入数据造成的. 通常是在安装了新的驱动程序, 系统服务或升级了设备的固件程序后. ◇解决方案:如果在错误信息中包含有驱动程序或者服务文件名称, 请根据这个信息将新安装的驱动程序或软件卸载或禁用. 29、0x000000C2:BAD_POOL_CALLER ◆错误分析:一个内核层的进程或驱动程序错误地试图进入内存操作. 通常是驱动程序或存在BUG的软件造成的. ◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除. 30、0x000000CERIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS ◆错误分析:通常是由有问题的驱动程序或系统服务造成的. ◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除. 31、0x000000D1RIVER_IRQL_NOT_LESS_OR_EQUAL ◆错误分析:通常是由有问题的驱动程序引起的(比如罗技鼠标的Logitech MouseWare 9.10和9.24版驱动程序会引发这个故障). 同,有缺陷的内存、 损坏的虚拟内存文件、 某些软件(比如多媒体软件、杀毒软件、备份软件、DVD播放软件)等也会导致这个错误. ◇解决方案:检查最新安装或升级的驱动程序(如果蓝屏中出现"acpi.sys"等类似文件名, 可以非常肯定驱动程序问题)和软件; 测试内存是否存在问题; 进入"故障恢复控制台", 转到虚拟内存页面文件Pagefile.sys所在分区, 执行"del pagefile.sys"命令, 将页面文件删除; 然后在页面文件所在分区执行"chkdsk /r"命令;进入Windows后重新设置虚拟内存.如果在上网遇到这个蓝屏, 而你恰恰又在进行大量的数据下载和上传(比如:网络游戏、BT下载), 那么应该是网卡驱动的问题, 需要升级其驱动程序. 32、0x000000EA:THREAD_STUCK_IN_DEVICE_DRIVER ◆错误分析:通常是由显卡或显卡驱动程序引发的. ◇解决方案:先升级最新的显卡驱动, 如果不行, 则需要更换显卡测试故障是否依然发生. 33、0x000000ED:UNMOUNTABLE_BOOT_VOLUME ◆错误分析:一般是由于磁盘存在错误导致的, 有也建议检查硬盘连线是否接触不良, 或是没有使用合乎该硬盘传输规格的连接线, 例如ATA-100仍使用ATA-33的连接线, 对低速硬盘无所谓, 但告诉硬盘(支持ATA-66以上)的要求较严格, 规格不对的连线有也会引起这类没办法开机的故障. 如果在修复后, 还是经常出现这个错误, 很可能是硬盘损坏的前兆. ◇解决方案:一般情况下, 重启会解决问题, 不管怎么样都建议执行"chkdsk /r"命令来检查修复硬盘 34、0x000000F2:HARDWARE)INTERRUPT_STORM ◆错误分析:内核层检查到系统出现中断风暴, 比如:某个设备在完成操作后没有释放所占用 的中断. 通常这是由缺陷的驱动程序造成的. ◇解决方案:升级或卸载最新安装的硬件驱动程序. 35、0x00000135:UNABLE_TO_LOCATE_DLL ◆错误分析:通常表示某个文件丢失或已经损坏, 或者是注册表出现错误. ◇解决方案:如果是文件丢失或损坏, 在蓝屏信息中通常会显示相应的文件名, 你可以通过网络或是其他电脑找到相应的文件, 并将其复制到系统文件夹下的SYSTEM32子文件夹中. 如果没有显示文件名, 那就很有可能是注册表损坏, 请利用系统还原或是以前的注册表备份进行恢复. 36、0x0000021A:STATUS_SYSTEM_PROCESS_TERMINATED ◆错误分析:用户模式子系统, 例如Winlogon或客服服务运行子系统(CSRSS)已损坏, 所以无法再保证安全性, 导致系统无法启动. 有, 当系统管理员错误地修改了用户帐号权限, 导致其无法访问系统文件和文件夹. ◇解决方案:使用"最后一次正确的配置", 如果无效, 可使用安装光盘进行修复安装. 37、STOP 0xC0000221 or STATUS_IMAGE_CHECKSUM_MISMATCH ◆错误分析:通常是由于驱动程序或系统DLL文件损坏造成的. 一般情况下, 在蓝屏中会出现 文件名称 ◇解决方案: (1)使用Windows安装光盘进行修复安装; (2)如果还能进入安全模式, 可以"开始-->运行": sfc /scannow (3)还可以采用提取文件的方法来解决, 进入"故障恢复控制台", 使用copy或expand命令从光盘中复制或解压受损的文件. 不过, 蓝屏一般都是驱动程序文件的问题, 所以expand命令会用的都一些, 比如:蓝屏中提示tdi.sys文件, 因为驱动文件一般在i386\driver压缩包里, 所以使用: expand %CDROM:\i386\driver.cab \f:tdi.sys c:\winnt\system\drivers.(xp为expand %CDROM:\i386\driver.cab \f:tdi.sys c:\windowns\system\drivers) 38、如果启动出现这些蓝屏停机码 如果在Windows启动出现蓝屏, 并出现附表一中的错误信息, 那么多半硬件出现了问题, 请用硬件厂商提供的诊断工具来判断硬件是否存在问题, 并到其网站查看是否有最新的BIOS或固件更新程序. 如果硬件没有问题, 重装Windows 2K/XP, 若相同问题还是出现, 就只能求助专业的技术支持了. 如果遇到的附表二中的错误信息, 也只有重装Windows了, 如果不能解决问题, 建议求
UINT mainThread(LPVOID ThreadParam) { int ret; uchar szbuff[100]; for(int i=0;i<10;i++) { //memset(szbuff,0,100); ::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_GET,0,0);//取数据 for(int k=0;k<2;k++) { ret=mifs_request_2(0x26,szbuff); //寻卡 if(ret==0)break; } if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,14,0);continue;} ret=mifs_load_keyE2(0x60,g_SectorNO,g_KeyA);//装载密钥A if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,1,0);continue;} ret=mifs_anticoll(0x00, g_CardSerialNo);//防冲突,返回卡序号 if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,3,0);continue;} ret=mifs_select(g_CardSerialNo, szbuff);//根据卡序号选择卡片 if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,4,0);continue;} ret=mifs_authenticationE2(0x60,g_CardSerialNo, g_SectorNO);//密钥A验证 if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,5,0);continue;} ret=mifs_read(g_BlockNO,g_BlockData);//读取块数据 if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,6,0);continue;} /* ret=mifs_authenticationE2(0x61,g_CardSerialNo, g_SectorNO);//密钥B验证 if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,7,0);continue;} */ // ret=mifs_initValue(g_BlockNO, g_InitValue);//初始化余额 // if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,8,0);continue;} // ::Sleep(100); ret=mifs_addValue(g_BlockNO, g_AddValue);//增余额 // ret=mifs_value(0xc1,g_BlockNO,g_AddValue); if(ret>0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,10,0);continue;} else if(ret<0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,15,0);break;} ret=mifs_decreaseValue(g_BlockNO, g_DecValue);//减余额 // ret=mifs_value(0xc0,g_BlockNO,g_DecValue); if(ret>0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,11,0);continue;} else if(ret<0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,13,0);break;} ret=mifs_readValue(g_BlockNO, &g_ReadValue);//读余额 if(ret!=0){::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,9,0);continue;} // Buzzer(2);//蜂鸣(加了蜂鸣之后读卡器会滞后) ::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_PUT,0,0);//显示结果 //::Sleep(1000); } ::SendMessage((HWND)ThreadParam,WM_MY_MESSAGE_INFO,12,0); g_ReadFlag=0; return 0; }

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧