一般保护错误

时间:2015-12-24 16:06:06

标签: c++

我正在开发一个c ++项目,其中各个玩家的记录按照他们得分的顺序进行维护。这是代码的片段

1.添加新用户

void add_to_leader_board(user u)
{
    fstream f("ldr brd.dat",ios::in|ios::binary);
    fstream f2("temp.dat",ios::binary|ios::out);
    user a;
    int chk=0;
    while(f.read((char*)&a,sizeof(user)))
    {
        if(a.getpts()<u.getpts()&&chk==0)
        {
            f2.write((char*)&u,sizeof(user));
            chk++;
        }
        f2.write((char*)&a,sizeof(user));
    }
    f1.close();
    f2.close();
    remove("ldr brd.dat");
    rename("temp.dat","ldr brd.dat");
    dis_leader_board(u);
    getch();
}

2.显示记录

void dis_leader_board(user u)
{
    clrscr();
    user a;
    int i=0;
    fstream f("ldr brd.dat",ios::in|ios::binary);
    cout<<"Name";
    gotoxy(15,1);
    cout<<"Points";
    while(f.read((char*)&a,sizeof(user)))
    {
        a.output(i);   //The definition of this function has been written down
    }
    f.close();
}

3. 修改现有用户的记录插入适当的位置(写到问题发生的地方)

void modify_leader_board(user u)
{
    cout<<"Before saving ";
    for(int i=0;i<5;i++)
    {
        delay(0,0,800);
        cout<<". ";
    }
    delay(0,5);
    clrscr();
    dis_leader_board(u);
    delay(1,10);
    .
    .//Problem occurs before this.So I don't think the remaining is reqd
    .

4.输出功能

inline void user::output(int r)
{
/*  "name" and "pts"
are data members*/
    r+=2;
    gotoxy(1,r);
    cout<<name;
    gotoxy(15,r);
    cout<<pts;
}

当我尝试执行程序时,以下是我遇到的问题 -

  1. 我调用了add_to_leader_board函数。它工作得很好。该名称已添加到该文件中。我很高兴。但是显示记录后,通过调用dis_leader_board(这是add_to_leader_board本身的一部分),我收到一条消息,上面写着“一般保护例外”。
  2. 我调用了modify_leader_board函数。同样,它一切正常,直到它在调用dis_leader_board之前到达clrscr()函数。我很开心......但是太多了...这次甚至在它开始显示记录之前,我收到一条消息说“一般保护例外”!!!
  3. “一般保护例外”,“一般保护例外”,“一般保护例外”,“一般保护例外”.....无论我走到哪里,它似乎像Hutch狗一样跟着我!
  4. 我觉得,即使是任何政府和组织提供的少数群体(无论是否需要)的过度保护,都不会与编制者提供给代码的保护相匹配!!!!

    当调用add_to_leader_board时,异常(常规保护异常)发生在display_leader_board函数(由add_to_leader_board调用)的语句f.close()(可能与它作为最后一个语句有关)以及modify_leader_board是在调用函数display_leader_board

    之前,它就会被调用

    任何人都可以帮我找到错误吗?

    我还想知道可能发生一般保护例外的所有其他情况。

    我很感激早期的回应。

    谢谢

1 个答案:

答案 0 :(得分:2)

您需要显示您的user类的定义,但我怀疑此类包含非POD成员。

因此,您对文件中这些类的writeread实例的简单方法显然不起作用。您将编写一堆原始指针值,并在读回它们时,这些原始指针值绝对没有任何意义,并且访问它们最有可能导致您的&#34;一般保护错误&#34; s。

这是您可以从问题中提供的有限信息中确定的最佳信息。