Цитата:
Сообщение от icWasya
я же говорю
TCommandStackElmt = array[0 .. MaxInt div 4-1] of TCommandStackElement;
PCommandStackElmt = ^TCommandStackElmt;
Размер указан толькол для обмана компилятора - что бы не ругался на границу массива.
а работать так
Код:
PCommandStack : PCommandStackElmt;
GetMem(PCommandStack , FCount*sizeof(TCommandStackElement));
ReallocMem(PCommandStack , FCount*sizeof(TCommandStackElement));
FreeMem(PCommandStack);
Ещё раз для тех кто в танке
если написали
Код:
PCommandStackElmt = array of TCommandStackElmt
, то используйте только SetLength, иначе потом можно огрести по полной 
|
Уххх... в общем получилось все сделать
Итоговая конструкция осталась изначальной:
Код:
TCommandStackElmt = array of TCommandStackElement;
PCommandStackElmt = ^TCommandStackElmt;
Обманывать компилятор с помощью [0 .. MaxInt div 4-1] не нашлось необходимости, все отлично работает:
Увеличение массива происходит через SetLength(PACommandStack^,FCount); присвоение данных через PACommandStack^[FCount-1].Command:=ICommand; так-же без проблем.
А косяк обнаружился в теле основной программы - после выполнения AddNew (ICommand: TCommand), технично вызывался деструктор того, что уходило в ICommand...
В общем весь косяк был в том, что я изначально не знал о "указательной" природе классов, и удалял тот-же самый элемент, который только только забил в массив.
P.S. Называется хотел как лучше (раз создал объект - будь добр в конце удалить, дабы не мешался в памяти), а получилось через ...
Спасибо
