Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2011, 00:01   #1
mihailvolk
 
Регистрация: 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);
}
По-разному, смотря что закомментировать
Что посоветуете?
mihailvolk вне форума Ответить с цитированием
Старый 07.05.2011, 13:12   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
Что посоветуете?
Исправить оформление кода.
Тяжело читать.

Насчет itoa -- не все компиляторы эту функцию воспринимают.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 07.05.2011, 13:31   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

mihailvolk

rex=rex->next; //при отладке ругается здесь

ты думаешь, что работаешь со списком,но на самом деле это не так.
поле next при инициализации равно NULL, поэтому это выражение просто зануляет переменную rex. соответственно, при следующей итерации программа весело падает при попытке доступа по нулевому адресу. отсюда мораль - не использовать свои поделки для основных структур данных, а использовать хорошо отлаженные классы STL. если конечно твое задание не состоит в изобретении очередного велосипеда, едущего только назад, и с квадратными колесами. Тогда берешь программу под названием отладчик, и начинаешь по-шагово трассировать программу.
Rififi вне форума Ответить с цитированием
Старый 07.05.2011, 13:40   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
[
Насчет itoa -- не все компиляторы эту функцию воспринимают.
Во-первых не "воспринимают", а поддерживают, а во-вторых - это стандартная функция, и ее должен поддерживать любой компилятор, соответствующий стандарту
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с указателями 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