Привет всем.
Такой код:
interface
type TSost = (stRoad,stZnak);
TOpis = record
width,height:byte;
typ:TSost;
end;
TInfo = record
typ:TSost;
nomt:byte;
sv:string;
x,y,widthmt,heightmt,widthpt,heightpt:integer;
end;
Implementation
var cr:array of TOpis;
info:array of TInfo;
TLine_road.create;
begin
getmem(cr,sizeof(TOpis));
getmem(info,sizeof(TInfo));
end.
interface
type TSost = (stRoad,stZnak);
TOpis = record
width,height:byte;
typ:TSost;
end;
TInfo = record
typ:TSost;
nomt:byte;
sv:string;
x,y,widthmt,heightmt,widthpt,heightpt:integer;
end;
Implementation
var cr:array of ^TOpis; //<--
info:array of ^TInfo; //<--
TLine_road.create;
begin
getmem(cr[0],sizeof(TOpis)); //<--
getmem(info[0],sizeof(TInfo));//<--
end.
Самое удивительное - не то, что код компилируется, а то, что это на фиг не нужно: динамические массивы предполагают использование SetLength (в твоем случае
var), а не ручное выделение памяти. В чем смысл твоего кода? Ну, выделил ты память под первый элемент. Дальше что делать будешь?
cr:array of TOpis;
info:array of TInfo;
//
SetLength(cr, 1);
SetLength(info, 1);
Про SetLength я знаю, но мне нужная длина не даётся сразу, нужно выделять по одному элементу, допустим в цикле. Или так с помощью SetLength тоже можно?
ну например
setlength(mas,length(mas)+1);
а изменять...
mas[high(mas)].value;
или вести индекс....
Unconnected, можно вопрос? Эти два типа, TOpis и TInfo; как-то связаны между собой?
Кстати, к вопросу о том, что