Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка в реализации очереди? [D7, Win2k]


Страницы:   1 2

WELLiON ©   (2005-03-16 16:34:00) 

Здравствуйте, уважаемые Мастера. Пытаюсь реализовать очередь на дельфях. Стек реализовать уже получилось. Работает. Вот мой код:

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

type
 QData = string;
 PQu = ^Qu;
 Qu = record
   Next: PQu;
   Inf: QData;
 end;

 TQueue = class
   private
     Head: PQu;
     Tail: PQu;
     Length: Integer;
   public
     procedure Create;
     function Pop: QData;
     procedure Push(C: QData);
 end;

function TQueue.Pop: QData;
 var N: PQu; C: QData;
begin
if Head<>nil
 then
   begin
     N:=Head;
     C:=N^.Inf;
     Head:=Head^.Next;
     if Head=nil
       then Tail:=nil;
     Dispose(N);
   end;
Result:=C;
end;

procedure TQueue.Push(C: QData);
 var N: PQu;
begin
 New(N);
 N^.Inf:=C;
 N^.Next:=nil;
 if Head=nil
   then
     begin
       Head:=N;
       Tail:=N;
     end
   else
     begin
       Tail^.Next:=N;
       Tail:=N;
     end;
end;

procedure TQueue.Create;
begin
 Head:=nil;
 Tail:=nil;
 Length:=0;
end;

var Queue: TQueue;

begin
Write('OK');
ReadLn;
Queue.Create;
Queue.Push('Test');
Writeln(Queue.Pop);
Write('OK');
ReadLn;
end.


Может, ошибка плавает на поверхности, и я её не заметил? Дельфа пишет: 'access violation at 0x77f8edab: read of address 0x00000020'.
Заранее благодарен. Я хочу нормально реализовать стек, дек и очередь в дельфи и выложить код где-нибудь у вас на сайте или в другом месте. Я искал в инете и нормальных реализаций не нашел.


Anatoly Podgoretsky   (2005-03-16 20:23:00) [1]

Japp   (16.03.05 17:31) [25]
Не отбивать хлеб у Александра Сергеевича!


begin...end   (2005-03-16 20:07:00) [2]

> Димон   (16.03.05 20:06) [33]

...и классовые методы.


Димон   (2005-03-16 20:06:00) [3]


>  [8] Zeqfreed ©   (16.03.05 16:52)

инога ничего страшного. Вспомни free...


wicked   (2005-03-16 19:36:00) [4]


> Ух-ты. Проверил - действительно методы не обращающиеся к
> полям корректно работают, вроде об этом нигде не читал.
> Спасибо за полезную информацию.

советую не сильно радоваться - это просто особенность реализации ООП... они не должныработать...


Zeqfreed   (2005-03-16 19:07:00) [5]

Игорь Шевченко ©   (16.03.05 18:41) [30]
Ух-ты. Проверил - действительно методы не обращающиеся к полям корректно работают, вроде об этом нигде не читал. Спасибо за полезную информацию.


Игорь Шевченко   (2005-03-16 18:41:00) [6]

Zeqfreed ©   (16.03.05 18:30) [29]


>  В противном случае, книги по Object Pascal врут, говоря,
> что вызывать методы экземпляра класса, до создания этого
> самого экземпляра нельзя


Нет, книжки вряд ли врут. Методы, кстати, вызывать можно, если они не виртуальные, а вот обращаться к полям ну никак нельзя :)


Zeqfreed   (2005-03-16 18:30:00) [7]

Игорь Шевченко ©   (16.03.05 17:51) [28]
Кажется, я был неправильно понят. Я как раз и имел в виду, что хотелось бы надеяться, что это глюк компилятора. В противном случае, книги по Object Pascal врут, говоря, что вызывать методы экземпляра класса, до создания этого самого экземпляра нельзя. Надеюсь, сейчас, я выразился более-менее понятно.


Игорь Шевченко   (2005-03-16 17:51:00) [8]

Zeqfreed ©   (16.03.05 17:49) [27]

Есди не секрет, в какой книжке по Object Pascal рекомендуется выполнять процедуру Create объекта, указатель на который равен nil ?


Zeqfreed   (2005-03-16 17:49:00) [9]

Игорь Шевченко ©   (16.03.05 17:41) [26]
Я имел ввиду Object Pascal. Выразился несколько неточно.


Игорь Шевченко   (2005-03-16 17:41:00) [10]


> Ну я надеюсь, что это не ошибка во всех книжках по паскалю
> )


А причем тут паскаль ?


Japp   (2005-03-16 17:31:00) [11]

WELLiON   (16.03.05 17:09) [23]
Но почему очередь не работает-то? Потому что, перед процедурой Create нет слова constructor? Сильно сомневаюсь
Давно так не веселился ...!!!
А кто память под объект добывать будет - Билл Гейтс?!!!!


Zeqfreed   (2005-03-16 17:10:00) [12]

Игорь Шевченко ©   (16.03.05 17:09) [22]
Ну я надеюсь, что это не ошибка во всех книжках по паскалю )


WELLiON   (2005-03-16 17:09:00) [13]

2begin...end : ок. Будем работать. Но почему очередь не работает-то? Потому что, перед процедурой Create нет слова constructor? Сильно сомневаюсь. Тут что-то другое. А про классы - я с Вами согласен. Доделаю конструктор, и будем говорить дальше.
Я пошел. Рабочий день закончился. Спасибо.


Игорь Шевченко   (2005-03-16 17:09:00) [14]


> Но, что самое смешное - стэк действительно работает.


Это глюк компилятора


begin...end   (2005-03-16 17:06:00) [15]

> WELLiON   (16.03.05 17:04) [19]

> А реализацию класса будет доделывать, когда прога
> заработает.

Ваша программа не заработает правильно до тех пор, пока не будут "доделаны" все её составляющие. В том числе, и классы.


WELLiON   (2005-03-16 17:06:00) [16]

2Просто Джо, [16]: я имею в виду в данном конкретном случае. Прога не заработает, если я сделаю конструктор.


WELLiON   (2005-03-16 17:04:00) [17]

Что стек работает - меня больше всего убивает. У меня есть сишный код, который мы в свое время писали в универе. Я его переводил на дельфи. Стек работает, а очередь - нет. Потому и решил с вами проконсультироваться. А реализацию класса будет доделывать, когда прога заработает.


WELLiON   (2005-03-16 17:02:00) [18]

Вы мастера не только в дельфях, но и игре на нервах! Косяк какой-то вышел, когда я пытался сделать конструктор. Я решил, что пока обождёт. А вы что, код не читаете, если в нем не реализован конструктор?


Zeqfreed   (2005-03-16 17:02:00) [19]

Лучше все-таки книги почитать.
Но, что самое смешное - стэк действительно работает.


Просто Джо   (2005-03-16 17:01:00) [20]


> А что нет конструктора - это не принципиально. Нет желания
> пока с этим разбираться.


Прошу задуматься над этими словами.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо