Я работаю над проектом в C++, где запись различных игроков поддерживается в порядке точек они имеют scored.Here являются сегментами кодаGeneral Protection ошибка
1.Adding нового пользователя
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.Displaying записи
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.Output функции
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. Все прошло отлично. Имя было добавлено в файл. Я был очень счастливым. Но после отображения записей, вызвав dis_leader_board (который является частью add_to_leader_board), я получил сообщение, в котором говорилось об «Общей защите исключения».
- Я вызывал функцию edit_leader_board. Опять же, он работал отлично, пока не дошел до функции clrscr() перед вызовом dis_leader_board. Я был очень доволен ...... Но toozzz ... На этот раз даже , прежде чем он начал показывать записи, я получил сообщение с сообщением «General Protection Exception» !!!
- «Исключение общей защиты», «Исключение общей защиты», «Исключение общей защиты», «Исключение общей защиты» ..... Куда бы я ни пошел, кажется, следует за мной, как собака Хатч !!!
У меня такое чувство, что даже защита от меньшинства (независимо от того, требуется оно или нет), предложенная любым из правительств и организаций, не будет соответствовать защите, которую компилятор предлагает коду !!!!
Когда add_to_leader_board называется, исключение (General Protection Exception) происходит в f.close операторов() (возможно, что-то делать с ним быть последним оператором) в display_leader_board функции (вызывается add_to_leader_board) и когда modify_leader_board называется , это происходит даже до вызова функции display_leader_board
Может ли кто-нибудь помочь мне найти ошибку ??
Я также хочу знать все другие случаи, когда может возникнуть исключение общей защиты.
Я ценю ранний ответ.
Спасибо
Ну, вы прошли через код в отладчике? Вы где-то переписываете какую-то память или имеете плохой указатель. – OldProgrammer
Добро пожаловать в переполнение стека! Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
Что такое пользователь? Если это класс, вам нужно создать его в dis_leader_board(). – nicomp