Проблем с указател

3 отговора 114 прегледа
#1

Проблем с указател

Здравейте на всички. Имам един доста досаден проблем с указатели, който не съм сигурен как точно да реша. Проблема/ постановката е следната:

Procedure1 (index : integer; DefGlob : TObjModel);
var lPtr : ^TList;
i : integer;
begin
case index of
1 : lPtr := Addr(DefGlob.StockList);
2 : lPtr := Addr(DefGlob.HouseList);
end;

for i := 0 to lPtr^.Count-1 do
begin
<Do something>
end;
end;

Та на въпроса.

Относно аргументите на процедурата:

Първият аргумент указва коя таблица се разглежда
Вторият параметър е от клас TObjModel, който се явява глобален модел на база данни, полетата му FStockList, FHouseList съдържат дефинициите на полетата на две таблици като се използват списъци от указатели.

Идеята е да се превключва между списъците и да се извършва дадена дейност, базирайки се на броя елементи в списъка lPtr^.

Тук идва проблема: При инициализирането на глобалния модел броя на елементите е точно както си трябва.
Но като влиза в процедурата нещо се обърква при присвояването (това го проверих) и вместо броя на елементите да е коректен, той всеки път нараства с колкото е бил в началото.

В процедурата нямам освобождаване на локалния указател, понеже ако го освободя това ще ми затрие и глобалния модел поради обръщането по адрес.

Платформата която се ползва е: Виндовс ХП, Делфи 6.
Ако някой има идеи или нещо не съм обяснил както трябва да казва.

Отговор
в отговор на Daniel #2

Re: Проблем с указател

каква е причината да използваш ^TList вместо var lvList:TList и в case да правиш
lvList:=DefGlob.StockList;
или ако се налага
lvList:=TList(DefGlob.StockList);

Отговор
в отговор на Daniel #3

Re: Проблем с указател

Опитай така:
Procedure1 (index : integer; var DefGlob : TObjModel);

Отговор
в отговор на Daniel #4

Проблема го оправих

Оказа се друго нещо, някой преди мен е пообъркал някои неща от които гърмеше програмката. Сега всичко си е както трябва (или поне засега).

Отговор