我正在开发一个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;
}
当我尝试执行程序时,以下是我遇到的问题 -
我觉得,即使是任何政府和组织提供的少数群体(无论是否需要)的过度保护,都不会与编制者提供给代码的保护相匹配!!!!
当调用add_to_leader_board时,异常(常规保护异常)发生在display_leader_board函数(由add_to_leader_board调用)的语句f.close()(可能与它作为最后一个语句有关)以及modify_leader_board是在调用函数display_leader_board
之前,它就会被调用任何人都可以帮我找到错误吗?
我还想知道可能发生一般保护例外的所有其他情况。
我很感激早期的回应。
谢谢
答案 0 :(得分:2)
您需要显示您的user
类的定义,但我怀疑此类包含非POD成员。
因此,您对文件中这些类的write
和read
实例的简单方法显然不起作用。您将编写一堆原始指针值,并在读回它们时,这些原始指针值绝对没有任何意义,并且访问它们最有可能导致您的&#34;一般保护错误&#34; s。
这是您可以从问题中提供的有限信息中确定的最佳信息。