[Delphi] Zmienna przyjmuje nie swoja wartosc!

0

Hmm dlugo sie meczylem i nie moglem dojsc co robie zle i teraz zauwazylem cos dziwnego a dokladniej podam mniej wiecej o co chodzi kod oczywiscie nie jest taki jak tu ale glownie to cos takiego

Trekord = Record
X1          : SmallInt;
X2          : SmallInt;
AAA         : byte;        <<<<<<<<<<<<<<<
X3          : byte;
X4          : byte;
X5          : byte;
X6          : byte;
X7          : String[3];
X8          : byte;
end;
var
Tablica : array[1..20] of Trekord;
CCC : byte;
Zmienna : byte;

I teraz gdy jest wykonywane cos w stylu

CCC:=0;
IF Zmiana=10 then Tablica[L].AAA:=Random(8);

i co sie okazuje zmienna CCC przyjmuje wartosc CCC=Tablica[L].AAA zamiast 0 :| co dziwniejsze CCC trzyma dobra wartosc gdy

Trekord = Record
X1          : SmallInt;
X2          : SmallInt;
X3          : byte;
X4          : byte;
X5          : byte;
X6          : byte;
X7          : String[3];
AAA         : byte;        <<<<<<<<<<<<<
X8          : byte;
end;

zamienie miejscami w edytorze zmienne? powiecie tak wiec zamien i po problemie no tak ale jaka mam pewnosc ze inne zmienne nie beda sie mieszac a wydaje mi sie ze tak sie wtedy dzieje ale dosc duzo ich jest wiec ciezko sprawdzic.

Ciezko to wytlumaczyc ale mam nadzieje ze zrozumieliscie tylko czy znacie sposob na naprawe tego i czy spotkaliscie sie z czyms takim mam Delphi 6

0

chyba coś kręcisz, może byś dał kod bliższy prawdzie ?

0

no spoko myslisz ze zmyslam z tym kodem :-/ to byly praktycznie wyciete fragmenty tyle ze nazwy zmiennych zmienilem.

Co zauwazylem zmieniajac ten dziwny SmallInt na integer chyba jest ok

0

wyłącz optymalizację i przebuduj projekt

0

Mialem kiedys podobne problemy pod Delphi 2005 z komponentem TTreeView i jakas zmienna. Znikala mi jej zawartosc. Nie pamietam dokladnie jak to bylo ale zjawisko bylo powtarzalne. Przekopiowalem nawet fragment kodu do nowego projektu i to samo. Co ciekawe po skompilowaniu pod delphi 5 wszystko bylo ok :|

0

Deklaruj rekordy jak należy wtedy nie będzie takich problemów.
data align: byte, word, dword, qword
record struct
a, b, c : byte;
n : Integer;
end;
rozmiar = 7, albo 8 zależnie od ustawienia 'align'
Później kompilator wytka tam dodatkowe pola, aby to wyrównać i pewnie głupieje.
Nie należ zbyt wiele od programika dla dzieci, trzeba go wyręczyć:
record struct
a, b, c : byte;
puste_1 : byte;
n : Integer;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1