Главная страница
    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.45 MB
Время: 0.037 c
14-1082619292
Silver Alex
2004-04-22 11:34
2004.05.16
Сертификация


14-1082719868
ИМХО
2004-04-23 15:31
2004.05.16
Netscape и Mozilla


7-1081084057
Zombik666
2004-04-04 17:07
2004.05.16
ComPort. Autodedect Port.


7-1079092554
$tranger
2004-03-12 14:55
2004.05.16
Набор номера


1-1083078463
.Lex
2004-04-27 19:07
2004.05.16
Как отловить Error в программе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский