Главная страница
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.042 c
8-1077455594
Iks
2004-02-22 16:13
2004.05.16
Рабочий стол


11-1068831044
Ciber SLasH
2003-11-14 20:30
2004.05.16
Помогите установить компонент KOLRarInfoBar


3-1082459816
Oksana
2004-04-20 15:16
2004.05.16
Обмен данными между таблицами MSSQL и лок. dbf-таблицами


14-1083150908
Undert
2004-04-28 15:15
2004.05.16
Где можно в цифровом виде


3-1082112658
Dimbas
2004-04-16 14:50
2004.05.16
Проблема открытия базы с CD