|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.05.2011, 00:01 | #1 |
Регистрация: 10.04.2011
Сообщений: 6
|
проблема с указателями
Написал кусок программы для вывода списка лучших 5 игроков на экран, но при запуске она вылетает. Не могу понять в чём дело.
Код HTML:
class higscores
{
private:
struct Spisok
{
int Number;
char Name[12];
int Count;
Spisok *next, *prev;
Spisok()
{
Number=0;
strcpy(Name, "");
Count=0;
next=prev=NULL;
}
}*begin, *end, *rex;
public:
void ReadFile(void);
void Show(void);
higscores()
{
end=rex=NULL;
}
~higscores()
{
rex=begin;
while(begin!=NULL)
{
rex=begin;
begin=begin->next;
delete rex;
}
}
};
void higscores::ReadFile(void)
{
rex = new Spisok;
FILE *fin;
int i;
fin=fopen("Highscore.txt", "a+t");
while(!feof(fin))
{
for(i=0;i<5;i++)
{
fscanf(fin, "%d", &rex->Number);
fscanf(fin, "%s", &rex->Name);
fscanf(fin, "%d", &rex->Count);
rex=rex->next; //при отладке ругается здесь
}
}
fclose(fin);
}
void higscores::Show(void)
{
cleardevice();
setfillstyle(1, 14);
bar(0, 160, 160, 320);
setfillstyle(1, 15);
bar(0, 320, 160, 480);
setfillstyle(1, 10);
bar(160, 0, 200, 480);
setcolor (4);
settextstyle(1, 1, 70);
outtextxy(230, 30, "HIGSCORES:");
settextstyle(1, 1, 40);
outtextxy(230, 100, "N:");
outtextxy(280, 100, "Name:");
outtextxy(520, 100, "Count:");
line (270, 105, 270, 400);
line (515, 105, 515, 400);
setcolor (6);
settextstyle(1, 1, 38);
outtextxy(230, 400, "press enter to continue");
ReadFile();
int y = 150, v=0;
char string[99]="";
rex = begin;
while(v!=5)
{
setcolor (8);
settextstyle(1, 1, 40);
itoa(rex->Number, string, 5); //здесь
outtextxy(230, y, string); //здесь
outtextxy(280, y, rex->Name); //здесь
itoa(rex->Count, string, 99); //здесь
outtextxy(520, y, string); //здесь
y+=50;
v++;
rex = rex->next; //и здесь
}
do
{
}
while (getch()!=13);
}
Что посоветуете? |
07.05.2011, 13:12 | #2 |
Software Developer
Участник клуба
Регистрация: 01.03.2011
Сообщений: 1,098
|
Код:
Тяжело читать. Насчет itoa -- не все компиляторы эту функцию воспринимают.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв. Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062 |
07.05.2011, 13:31 | #3 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
mihailvolk
rex=rex->next; //при отладке ругается здесь ты думаешь, что работаешь со списком,но на самом деле это не так. поле next при инициализации равно NULL, поэтому это выражение просто зануляет переменную rex. соответственно, при следующей итерации программа весело падает при попытке доступа по нулевому адресу. отсюда мораль - не использовать свои поделки для основных структур данных, а использовать хорошо отлаженные классы STL. если конечно твое задание не состоит в изобретении очередного велосипеда, едущего только назад, и с квадратными колесами. Тогда берешь программу под названием отладчик, и начинаешь по-шагово трассировать программу.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
07.05.2011, 13:40 | #4 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Во-первых не "воспринимают", а поддерживают, а во-вторых - это стандартная функция, и ее должен поддерживать любой компилятор, соответствующий стандарту
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с указателями | 3D Hunter | Общие вопросы Delphi | 8 | 14.03.2009 06:55 |
проблема с указателями =\ | shad0w | Общие вопросы C/C++ | 9 | 09.12.2007 03:36 |
Проблема с указателями | novicer | Общие вопросы Delphi | 5 | 17.06.2007 00:21 |