Проблем с указател
3 отговора
114 прегледа
Проблем с указател
Здравейте на всички. Имам един доста досаден проблем с указатели, който не съм сигурен как точно да реша. Проблема/ постановката е следната:
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.
Ако някой има идеи или нещо не съм обяснил както трябва да казва.
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.
Ако някой има идеи или нещо не съм обяснил както трябва да казва.
Re: Проблем с указател
каква е причината да използваш ^TList вместо var lvList:TList и в case да правиш
lvList:=DefGlob.StockList;
или ако се налага
lvList:=TList(DefGlob.StockList);
lvList:=DefGlob.StockList;
или ако се налага
lvList:=TList(DefGlob.StockList);
Re: Проблем с указател
Опитай така:
Procedure1 (index : integer; var DefGlob : TObjModel);
Procedure1 (index : integer; var DefGlob : TObjModel);
Проблема го оправих
Оказа се друго нещо, някой преди мен е пообъркал някои неща от които гърмеше програмката. Сега всичко си е както трябва (или поне засега).