一般保护错误 我正在研究C++中的一个项目,其中各个玩家的记录按照他们得分的顺序来保持。下面是代码的部分

一般保护错误 我正在研究C++中的一个项目,其中各个玩家的记录按照他们得分的顺序来保持。下面是代码的部分,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.ge

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();
}
void添加到领导板(用户u)
{
fstream f(“ldr brd.dat”,ios::in | ios::binary);
fstream f2(“温度数据”,ios::binary | ios::out);
用户a;
int-chk=0;
而(f.read((char*)&a,sizeof(user)))
{

如果(a.getpts()需要显示
用户
类的定义才能确定,但我怀疑该类包含非成员

因此,简单地
将这些类的实例写入文件和
读取文件显然是行不通的。您将要写入一堆原始指针值,读回这些原始指针值后,这些原始指针值毫无意义,而访问它们是导致“一般保护错误”的最可能原因美国


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

好的,您是否在调试器中单步执行了代码?您正在覆盖某些内存,或者指针不正确。欢迎使用堆栈溢出!听起来您可能需要学习如何使用调试器单步执行代码。良好的调试ger,你可以一行一行地执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:。什么是用户?如果它是一个类,那么你需要在dis_leader_board()中实例化它。没有人可以为您调试您的程序,因为您没有提供。@nicomp您所说的实例化是什么意思??
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();
}
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
    .
inline void user::output(int r)
{
/*  "name" and "pts"
are data members*/
    r+=2;
    gotoxy(1,r);
    cout<<name;
    gotoxy(15,r);
    cout<<pts;
}