Главная страница
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.034 c
14-1082141575
Knight
2004-04-16 22:52
2004.05.16
В музей купили ноутбук... сразу два прикола...


7-1080704871
Мыш
2004-03-31 07:47
2004.05.16
Как узнать высоту таскбара и высоту заголовка окна?


3-1082112624
T{}r(l-l
2004-04-16 14:50
2004.05.16
BDE отваливается


1-1083183959
Михаил
2004-04-29 00:25
2004.05.16
Многомерные динамические массивы


14-1082907721
Darmen
2004-04-25 19:42
2004.05.16
TaskBar