Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

помогите разобраться со стеком   Найти похожие ветки 

 
nova5   (2004-05-03 14:13) [0]

Программисты помогите! Написал свой класс стека:
...
 TStrArray = array[1..65535] of string;
 PStrArray = ^TStrArray;
...
 TStack = class
   Capacity: Integer;   // макс. длина стека
   Size: Integer;       // текущая длина стека
   Items: PStrArray;    // указатель на массив элементов
// при создании стека указываем его макс. длину
   constructor Create(aCapacity: Integer);
   destructor Destroy; override;
   procedure Push(Value: string);
   function Pop: string;
   function IsEmpty: Boolean;
 end;
...
constructor TStack.Create(aCapacity: Integer);
begin
   Inherited Create;
   Capacity := aCapacity;
   GetMem(Items, aCapacity*SizeOf(string));
   ZeroMemory(Items, aCapacity*SizeOf(string));
end;

destructor TStack.Destroy;
begin
   FreeMem(Items);
   Inherited Destroy;
end;

procedure TStack.Push(Value: string);
begin
   if Size < Capacity        
   then begin
       Inc(Size);              
       Items[Size] := Value;  
   end;
end;

function TStack.Pop: string;
begin
   if Size > 0                
   then begin
       Result := Items[Size];  
       Dec(Size);              
   end;
end;

function TStack.IsEmpty: Boolean;
begin
   Result := (Size = 0);
end;
...
А затем вызываю всё это:
...
   stack.Create(5);
   stack.Push("A");
   stack.Push("B");
   stack.Push("C");
   REField.Lines.Add(stack.Pop);
   stack.Free;
...
И ОШИБКА!!! Почему? Кто-нибудь может знает!?
Кстати, ошибка такая: Access violation at address 0045421B
in module "PMain.exe". Write of address 0000004.


 
Anatoly Podgoretsky ©   (2004-05-03 14:18) [1]

Ты бы создал объект перед использованием


 
begin...end ©   (2004-05-03 14:20) [2]

Stack := TStack.Create(5)


 
nova5   (2004-05-03 15:04) [3]

Большое спасибо to begin...end, всё заработало! Как я мог такое пропустить :-)


 
Anatoly Podgoretsky ©   (2004-05-03 15:09) [4]

nova5   (03.05.04 15:04) [3]
Не удивляйся, частая ошибка, вместо создания, переинициализация, в принципе тут нет ошибки, если компонент был ранее создан.


 
KSergey ©   (2004-05-03 15:17) [5]

Не совсем по теме: а зачем такой изврат? Чем динамические массивы в борландовском исполнении не угодили? Или я что-то проглядел?


 
MBo ©   (2004-05-03 15:18) [6]

Да и класс стека в Delphi есть...



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
3-1082573072
Vit
2004-04-21 22:44
2004.05.16
подскажите как переменной присвоить номер текущей записи


8-1077199677
Bmouradov
2004-02-19 17:07
2004.05.16
Как на Canvas рисовать сглаженные прямые, окружности и т.п.?


1-1083249482
Berzercer
2004-04-29 18:38
2004.05.16
Можно ли раскрасить строки в Tmemo


1-1083512222
novill
2004-05-02 19:37
2004.05.16
Уважаемые мастаки, подскажите как внутри функции узнать ее имя?


1-1083077512
ЧупаЧупс
2004-04-27 18:51
2004.05.16
VcChart