Вече няколко часа се чудя къде ми е проблема. :?
Накратко проблеме е с променлива от тип "set of...." с повече от 30 елемента и като искам да я инициализирам чрез ":=[]", то вместо да стане [] става [elm24..elem30]
Направих и следния тест:
[code]
type
Test=(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32);
TTestSet= set of Test;
TTestSet2= set of 1..32;
var
TestSet:TTestSet;
TestSet:TTestSet2;
begin
TestSet:=[];//тук се получава все едно съм задал TestSet:=[t24..t30];
TestSet2:=[];//тук всичко е нормално
....................
end;
[/code]
Нулиране на TestSet получавам само така:
Fillchar(TestSet,SizeOf(TestSet),0);
Лошото е, че на много места използвам такъв тип променливи и ако трябва да променям всички или да ги проверявам за проблеми ще ми отнеме много време. Въпросната грешка я открих случайно при Debug на част от кода.
Моля за помощ и благодаря предварително на тези, които ще помогнат.
//Edit:
След още тестове установих следното:
TTestSet2= set of 1..15;//дължина(SizeOf) 2 байта -> няма проблеми
TTestSet3= set of 1..16;//дължина(SizeOf) 4???? байта -> ИМА проблеми
TTestSet4= set of 1..31;//дължина(SizeOf) 4 байта -> ИМА проблеми
TTestSet5= set of 1..39;//дължина(SizeOf) 5 байта -> няма проблеми
TTestSet6= set of 1..47;//дължина(SizeOf) 6 байта -> няма проблеми
TTestSet7= set of 1..55;//дължина(SizeOf) 7 байта -> няма проблеми
TTestSet32= set of 1..255;//дължина(SizeOf) 32 байта -> няма проблеми
ShowMessage('ts3='+IntToStr(Longint(TestSet3))+';' +'ts4='+IntToStr(Longint(TestSet4)));
ми връща: "ts3=1065353216;ts4=1065353216"
=>проблема е само при 4 байтовите set-ове. ?Редактирано от SAGE_BS на 22.11.06 17:03.
|