读书人

unhandled exception access violatio

发布时间: 2012-06-09 17:16:42 作者: rapoo

unhandled exception access violation

C/C++ code
#include <stdio.h>#include <stdlib.h>#define MAX 20#define null 0int o=0;typedef struct student{    char code[8];    int score;    char name[15];}student;typedef struct bitnode{    student data;    struct bitnode *lchild,*rchild;}bitnode,*bitree;typedef struct {    student *base;}sqlist;int insertbst(bitree &t,student e);int ordertraverse(bitree t,sqlist &l);int searchbst(bitree t,student key,bitree f,bitree &p);void listinsert(sqlist &l,student e);void initsqlist(sqlist &l);void main(){    int count=0;     sqlist l;    initsqlist(l);    student data;    bitree t=null;    int counter=0;    bitree x;    int i=0;    printf("enter counte of student\n");    scanf("%d",&count);    while(1<2)    {        printf("please enter info(code(8),name,score)\n");        printf("enter -1 to end\n");        scanf("%s%s%d",&(data.code),&(data.name),&(data.score));        if (data.code[0]=='-'||data.name[0]=='-'||data.score==-1)break;        else {            insertbst(t,data);counter++;}        if (counter==1)x=t;    }    ordertraverse(x,l);    printf("\n");    printf("按照成绩降序排列:\n");    for(i=0;i<count;i++)        printf("学号:%s ,姓名%s ,成绩 %d\n",l.base[i].code,l.base[i].name,l.base[i].score);}int searchbst(bitree t,student key,bitree f,bitree &p){    if (!t){p=f;return 0;}    else if (key.score==t->data.score){p=t;return 1;}    else if (key.score>=t->data.score)return searchbst(t->lchild,key,t,p);    else return searchbst(t->rchild,key,t,p);}int insertbst(bitree &t,student e){    bitree s;    bitree p;    int i=0;    if(!searchbst(t,e,NULL,p))    {        s=(bitree)malloc(sizeof(bitnode));        s->data.score=e.score;        s->lchild=s->rchild=NULL;        if(!p)t=s;        else if(e.score>p->data.score)p->lchild=s;        else p->rchild =s;        return 1;    }    else return 0;}int ordertraverse(bitree t,sqlist &l){    if(t->lchild)    {        ordertraverse(t->lchild,l);        //printf("%d  ",t->data);        listinsert(l,t->data);    }    else if(t->rchild)    {        //printf("%d  ",t->data);        listinsert(l,t->data);}    if(t->rchild)    {        ordertraverse(t->rchild,l);    }    if(!t->lchild&&!t->rchild)    {    //    printf("%d  ",t->data.score);        listinsert(l,t->data);    }    return 0;}void initsqlist(sqlist &l){}void listinsert(sqlist &l,student e){    static int o=0;    l.base[o++]=e;//access violation}

貌似是这句出现了问题,求解:
l.base[o++]=e;//access violation

[解决办法]
有一个名字为o的全局变量,还有一个同名的静态局部变量
[解决办法]
把o的值打印出来,看是否超出了范围
[解决办法]
调试, 在l.base[o++]=e这句前加断点 o是多少
[解决办法]
l.base[o++]=e;
l申请了多少?

读书人网 >C语言

热点推荐