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