Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.05 c
1-1083163623
fedor
2004-04-28 18:47
2004.05.16
Щелчок в item s ListView


4-1080639585
Kalmykov Sergei
2004-03-30 13:39
2004.05.16
Переобразование переменной.


1-1083149096
pavel_guzhanov
2004-04-28 14:44
2004.05.16
как сделать ocx?


1-1083699312
ohiio
2004-05-04 23:35
2004.05.16
checklistbox


14-1082953057
AGAMEMNUM
2004-04-26 08:17
2004.05.16
photoshop





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский